分层打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

分析:我们使用一个队列把每个节点放入,用last来记录正在打印的最右节点,nLast表示下一行的最右节点,temp集合表示每行的节点值,result表示最后所有按层遍历的值。nLast一直记录最新加入队列的节点,如果last和出队列的值相等说明需要换行继续,然后nLast赋值last,result添加temp的所有值,temp清空,队列不为空继续以上操作。

 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> temp=new ArrayList<>();
         ArrayList<Integer> result=new ArrayList<>();
        LinkedList<TreeNode> queue=new LinkedList<>();
        TreeNode last=root;
        TreeNode nLast=null;
        TreeNode node=null;
        queue.offer(root);
        if(root==null){
            return temp;
        }
        while(!queue.isEmpty()){
            node=queue.poll();
            temp.add(node.val);
            if(node.left!=null){
                queue.offer(node.left);
                nLast=node.left;
            }
            if(node.right!=null){
                queue.offer(node.right);
                nLast=node.right;
            }
            if(node==last){
                result.addAll(temp);
                temp.clear();
                last=nLast;
            }
            
        }
        return result;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值