二叉树算法之【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;
    }
}
相关推荐
昊坤说不出的梦3 分钟前
【实战】监控上下文切换及其优化方案
java·后端
李老师讲编程6 分钟前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛
zxsz_com_cn16 分钟前
设备预测性维护算法核心功能有哪些?六大模块拆解智能运维的“技术骨架”
运维·算法
期末考复习中,蓝桥杯都没时间学了18 分钟前
力扣刷题13
数据结构·算法·leetcode
2201_7569890928 分钟前
C++中的事件驱动编程
开发语言·c++·算法
多米Domi01139 分钟前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
2301_8223776540 分钟前
模板元编程调试方法
开发语言·c++·算法
故以往之不谏1 小时前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
渐暖°1 小时前
【leetcode算法从入门到精通】5. 最长回文子串
vscode·算法·leetcode
今天_也很困1 小时前
LeetCode热题100-560. 和为 K 的子数组
java·算法·leetcode