JZ32 从上往下打印二叉树(Java)

题目地址:从上往下打印二叉树_牛客题霸_牛客网

题目回顾:

不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。

JZ32 从上往下打印二叉树(Java)_第1张图片

JZ32 从上往下打印二叉树(Java)_第2张图片

解题思路:

使用队列

首先,队列是尾部插入,头部删除的一种数据结构。在遍历树的过程中使用层序遍历的话,是从根开始由左向右进行遍历的,那么我们在遍历树的时候将当前根的结点存入到队列中去,遍历到结点时将其从队列中删除,这样一来,队列poll方法获取的队列的头就是按从上到下顺序的。也就是我们要的结果。

JZ32 从上往下打印二叉树(Java)_第3张图片

整体代码:

    public static ArrayList PrintFromTopToBottom(TreeNode root) {
        ArrayList res = new ArrayList<>();

        if (root == null)
            return res;

        Queue q = new LinkedList<>();
        q.offer(root);
        while (!q.isEmpty()){
            TreeNode cur = q.poll();
            res.add(cur.val);
            if (cur.left!=null){
                q.add(cur.left);
            }
            if (cur.right != null)
                q.add(cur.right);
        }
        return res;
    }

你可能感兴趣的:(力扣刷题,算法,数据结构,java)