leetcode_树_剑指 Offer 32 - II. 从上到下打印二叉树 II(102. 二叉树的层序遍历)

大家好,我是被白菜拱的猪。

一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。

一、题目内容

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]

二、解题思路

这与前面的一题相似,方法借用栈实现树的层序遍历,这里需要注意的两点,也是我调bug调了半天才发现。

第一步一定要判空判空判空!!!重要的事情说三遍!

另外一个坑是list这里是地址,不能放在开头创建,假如这样做的话他们使用的是同一个list,resList.add(list),假如list改变的话,里面的所有list都会改变,所以要每次要使用list的时候要在单独创建,不要使用同一个。我就纳闷了最后为了节省空间共享一个,最后list.clear(),为什么结果为空呢,原来问题就出现在这里。

经过两题,树的层序遍历算是心中有些数。这一次做题没有查资料,自己就上手写了,虽然最后没有一次性过,但起码比第一次做无从下手好了些。

三、代码实现

class Solution{
    public List<List<Integer>> levelOrder(TreeNode root) {

        //层次遍历,需要借助队列
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> resList= new LinkedList<>();

        //刚开始一定要判空
        if (root == null){
            return resList;
        }
        //根节点入栈
        queue.offer(root);
        while (!queue.isEmpty()){
            List<Integer> list = new LinkedList<>();
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node != null){
                    list.add(node.val);
                }
                if(node.left !=null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
            resList.add(list);
        }
        return resList;
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值