二叉树算法之【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;
    }
}
相关推荐
老赵聊算法、大模型备案2 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
CoderYanger3 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者3 小时前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
厕所博士3 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
想用offer打牌3 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
皮卡龙3 小时前
Java常用的JSON
java·开发语言·spring boot·json
萌>__<新4 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
利刃大大4 小时前
【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法
java·开发语言·枚举·lambda·排序
float_六七4 小时前
Java反射:万能遥控器拆解编程
java·开发语言
xu_yule4 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法