二叉树的层序遍历-java

题目描述
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
在这里插入图片描述
题目链接102.二叉树层序遍历

乍一看这个遍历顺序是和bfs(前几天讲的前序,中序,后序叫bfs)是一样的,我们可以直接得出层序遍历结果,然而层序遍历要求的输出结果和bfs是不同的。层序遍历要求输出的是一个二维数组,而bfs的遍历结果是一维数组,无法区分每一层。
在这里插入图片描述

在这里插入图片描述
那么我们如何给bfs的遍历结果分层,这里用到一个辅助空间,队列。
在这里插入图片描述

我们先把根节点放到队列中,然后不断遍历队列。
在这里插入图片描述
根节点是树的第一层。第一层遍历完成,然后我们拿出根节点,如果左子树或右子树不为空,就把他们放在队列中,现在队列中有两个节点2,3。
在这里插入图片描述
树的第二层,接下来,会把2,3节点从队列中取出,在把2,3放入队列中,现在队列中有三个节点1,2,3。刚才给出的是一个临时的队列。
在这里插入图片描述

然后树的第三层,4,5,6,7放入临时队列中遍历
在这里插入图片描述
我们在把这四个节点从队列中拿出,放在最后的结果队列中。

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List <List<Integer>> list = new ArrayList<>();//返回类型是集合
        Queue <TreeNode> queue = new LinkedList<>();//队列
        if(root == null) return list;
        queue.add(root);
        while(queue.size() > 0){
            int size = queue.size();
            ArrayList <Integer> tmp = new ArrayList<>();
            for(int i = 0;i < size;i++){
                TreeNode t = queue.remove();
/*Queue 中 remove() 和 poll()都是用来从队列头部删除一个元素。
在队列元素为空的情况下,remove() 方法会抛出NoSuchElementException异常,poll() 方法只会返回 null 。
*/
                tmp.add(t.val);
                if(t.left != null){
                    queue.add(t.left);
                }
                if(t.right != null){
                    queue.add(t.right);
                }
            }
            list.add(tmp);
            
        }
        return list;
    }
}

参考题解
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/bfs-de-shi-yong-chang-jing-zong-jie-ceng-xu-bian-l/
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/die-dai-di-gui-duo-tu-yan-shi-102er-cha-shu-de-cen/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值