二叉树算法之【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;
    }
}
相关推荐
皮皮林5518 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河8 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
地平线开发者9 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮9 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者10 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
桦说编程11 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅13 小时前
Java面向对象入门(类与对象,新手秒懂)
java
HXhlx13 小时前
CART决策树基本原理
算法·机器学习