【剑指offer】面试题32 - III:从上到下打印二叉树 III(Java)
发布日期:2021-04-30 21:01:54 浏览次数:103 分类:精选文章

本文共 1169 字,大约阅读时间需要 3 分钟。

二叉树的层次遍历之字形输出,可以通过广度优先搜索(BFS)结合反转操作实现。以下是实现步骤和代码:

  • 初始化:创建一个双端队列(deque)来存储当前层的节点,并初始化结果列表。

  • 处理每一层

    • 取出队列的第一个节点,记录其值。
    • 将左孩子和右孩子分别加入队列(左先右后)。
  • 判断层数:每当处理完一层时,检查层数。如果是偶数层,则反转当前层的节点顺序。

  • 收集结果:将反转后的节点列表(或原顺序)添加到结果中。

  • 以下是优化后的代码:

    import java.util.*;public class Solution {    public List
    > levelOrder(TreeNode root) { List
    > result = new LinkedList<>(); if (root == null) { return result; } Deque
    deque = new LinkedList<>(); deque.offer(root); List
    list = new LinkedList<>(); int level = 1; while (!deque.isEmpty()) { TreeNode p = deque.poll(); list.add(p.val); if (p.left != null) { deque.offer(p.left); } if (p.right != null) { deque.offer(p.right); } if (level % 2 == 0) { Collections.reverse(list); } result.add(list); list = new LinkedList<>(); level++; } return result; }}

    代码解释

    • 使用双端队列(deque)来实现队列操作,便于插入和移除操作。
    • 每次循环处理一层节点,逐个取出节点并记录值。
    • 根据当前层的层数(level),判断是否为偶数层,偶数层反转当前层的节点顺序。
    • 每处理完一层后,将节点列表添加到结果中,并重置列表用于下一层。
    • 最后返回结果列表。

    示例测试

    给定二叉树:[3,9,20,null,null,15,7]

    • 第一层(level=1,奇数):[3]
    • 第二层(level=2,偶数):反转后为[9,20]
    • 第三层(level=3,奇数):[15,7]

    最终结果:[[3], [9,20], [15,7]]

    上一篇:HTML基础知识点总结三
    下一篇:WorkNote:Oracle数字[varchar]排序问题解决

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2026年06月06日 15时12分53秒