二叉树算法之【Z字型层序遍历】

目录

LeetCode-103题


LeetCode-103题

给定一个二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)

java 复制代码
class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        // check
        if (root == null)
            return result;
        // 借助队列来实现
        Queue<TreeNode> queue = new LinkedList<>();
        // 先将根节点放到队列中
        queue.offer(root);
        // 用于记录当前层的节点数量
        int c1 = 1;
        // 用于标识添加方向
        int flag = 1;
        // 只要队列不为空
        while (!queue.isEmpty()) {
            // 用于记录下一层节点数量
            int c2 = 0;
            LinkedList<Integer> inner = new LinkedList<>();
            for (int i = 0; i < c1; i++) {
                TreeNode curr = queue.poll();
                // 根据标识判断addLast还是addFirst
                if (flag % 2 == 1) {
                    inner.addLast(curr.val);
                } else {
                    inner.addFirst(curr.val);
                }
                // 有左子节点
                if (curr.left != null) {
                    // 将左子节点添加到队列中
                    queue.offer(curr.left);
                    // 记录下一层节点数量标识+1
                    c2++;
                }
                // 有右子节点
                if (curr.right != null) {
                    // 将右子节点添加到队列中
                    queue.offer(curr.right);
                    // 记录下一层节点数量标识+1
                    c2++;
                }
            }
            // 下一轮遍历通过c1就知道当前层有多少个节点了
            c1 = c2;
            // 下一层换个方向,以达到Z字形
            flag++;
            result.add(inner);
        }
        return result;
    }
}
相关推荐
jktantan12 分钟前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
独泪了无痕9 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南10 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
kingx311 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
Dream it possible!13 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
DevOpenClub13 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
心抵鹊13 小时前
算法之双指针系列(一)
算法·leetcode
十二13 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
露天赏雪14 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
小此方14 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划