树-----4.二叉树怎么层序遍历

第21日:二叉树的层序遍历

题目链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnldjj/

题目:

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

示例
二叉树:[3,9,20,null,null,15,7],

	3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

相关标签 树、广度优先搜索、二叉树

解题:

  1. 借用队列

    大致思路:

    将根节点放入队列中,然后遍历队列中的所有节点,将结点值添加到数组中,并创建临时队列,把当前结点的子节点(不为空)放进去;遍历完然后将队列指向临时队列;直到队列为空结束

    详细代码如下:

        public List<List<Integer>> levelOrder(TreeNode root) {
            //如果当前根结点为空,则返回空数组
            if (root==null) return new ArrayList<List<Integer>>();
            
            List<List<Integer>> list = new ArrayList<>();//结果集
            Queue<TreeNode> qe = new LinkedList<>();//队列
    		//将头结点放入队列
            qe.add(root);
    
            while (!qe.isEmpty()){//队列为空结束
                ArrayList<Integer> arr = new ArrayList<>();//当前层的临时数组
                Queue<TreeNode> tempQe= new LinkedList<>();//临时队列
                //遍历队列中的所有结点
                for (TreeNode node : qe) {
                    //将当前结点的值添加到数组中
                    arr.add(node.val);
                    //不为空时,分别将左右子结点添加到队列中
                    if (node.left!=null) tempQe.add(node.left);
                    if (node.right!=null) tempQe.add(node.right);
                }
                //添加到结果集中
                list.add(arr);
            	//指向下一层队列
                qe=tempQe;
            }
            return list;
        }
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值