剑指 Offer 32 - I. 从上到下打印二叉树

本文介绍了一种利用队列实现的二叉树广度优先遍历算法,通过队列的先入先出特性,实现了从上到下、从左到右的节点打印。该算法适用于节点总数不超过1000的二叉树。

目录

一、题目

二、思路

三、代码

执行结果:


一、题目

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:

[3,9,20,15,7]

提示:

  1. 节点总数 <= 1000

二、思路

               使用队列先入先出的性质来实现二叉树广度优先搜索(BFS)

               初始化: 新建一个队列、将root入队;

                                新建一个临时链表temp存放每次出队的元素;

               循环结束条件:队列为空时,结束循环

                1、每次循环将队列首元素记为node,将node.val取出存入temp;

                2、若node的左右结点不为空,则将左右结点入队;

         最后新建一个长度为temp.size()的数组res,将temp的元素遍历到res,返回res即为所求;

三、代码

class Solution {
    public int[] levelOrder(TreeNode root) {
        // 特殊情况
        if(root == null){
                return new int[0];
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        List<Integer> temp = new ArrayList<>();
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            temp.add(node.val);
            if(node.left != null){
                    queue.offer(node.left);
            }
            if(node.right != null){
                    queue.offer(node.right);
            } 
        }
        int[] res = new int[temp.size()];
        for(int i = 0; i < temp.size(); i++)
            res[i] = temp.get(i);
        return res;
    }
}

执行结果:

ps:

        之所以选择用list来作为临时存放而不是用数组、是因为新建链表无需指定长度。最后直接姐list转为数据即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值