题目:二叉树的层次遍历

该博客讨论了一种二叉树层次遍历的算法,通过使用一个队列来实现逐层从左到右的节点访问。博主提出了使用两个队列的策略,先将根节点放入第一个队列,然后在遍历过程中将未访问的子节点加入第二个队列,当第一队列为空时,将第二队列替换为第一队列,以此达到层次遍历的目的。此方法虽提高了空间效率,但空间复杂度仍然较高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)

您在真实的面试中是否遇到过这个题?

Yes





样例

给出一棵二叉树 {3,9,20,#,#,15,7},

    3

   / \

  9  20

    /  \

   15   7

返回它的层次遍历为:

[

  [3],

  [9,20],

  [15,7]

]

挑战

只使用一个队列去实现它
标签 Expand   

解题思路:
我们可以设置两个队列,想象一下队列的特点,就是先进先出,首先把第0层保存在一个队列中,然后按节点访问,并把已经访问节点的左右孩子节点放在第二个队列中,当第一个队列中的所有节点都访问完成之后,交换两个节点。这样重复下去,知道所有层的节点都被访问,这样做的代价就是空间复杂度有点高
/**
* Definition of TreeNode:
* public class TreeNode {
*     public int val;
*     public TreeNode left, right;
*     public TreeNode(int val) {
*         this.val = val;
*         this.left = this.right = null;
*     }
* }
*/


public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Level order a list of lists of integer
     */
    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        // write your code here
            ArrayList<ArrayList<Integer>> res  = new ArrayList<>();
          if(null==root) return res;
          Queue<TreeNode> fQ = new LinkedList<>();
          fQ.add(root);
          while(fQ!=null&&fQ.size()>0){
              Queue<TreeNode> sQ = new LinkedList<>();
             ArrayList<Integer> depthRoot  = new ArrayList<>();
              while(fQ!=null&&fQ.size()>0){
                   TreeNode  cur = fQ.poll();
                   depthRoot.add(cur.val);
                   if(cur.left!=null){
                        sQ.add(cur.left);
                   }
                   if(cur.right!=null){
                        sQ.add(cur.right);
                   }
              }
              res.add(depthRoot);
              fQ = sQ;
          }
          return res;                  
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值