算法题:面试题32 - I. 从上到下打印二叉树(题目+思路+代码+注释)层序遍历 时空 1ms击败97.84%用户 一次AC

在这里插入图片描述

题目

面试题32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

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

    3
   / \
  9  20
    /  \
  15   7

返回:

[3,9,20,15,7]

提示:

节点总数 <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

看上面那个,观察,拿出3,然后打印3的左边9和右边20,然后对9和20按顺序重复上面的步骤,打印左右节点是一个重复性操作,而9和20的顺序执行这个重复操作的保证由队列来完成即可。因此直接用一个队列就可以完成题目要求的层序遍历。非常简单
在这里插入图片描述

代码

public class Solution {
    public int[] levelOrder(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        levelSearch(root, list);
        int[] ret = new int[list.size()];
        for (int i = 0; i < ret.length; i++) {
            ret[i] = list.get(i);
        }
        return ret;
    }

    /**
     * 层级遍历并从左到右
     *
     * @param node
     * @param list
     */
    public void levelSearch(TreeNode node, List<Integer> list) {
        if (node != null) {
            LinkedList<TreeNode> queue = new LinkedList<>();
            queue.add(node);
            while (queue.size() > 0) {
                TreeNode poll = queue.poll();
                list.add(poll.val);
                if (poll.left != null) {
                    queue.add(poll.left);
                }
                if (poll.right != null) {
                    queue.add(poll.right);
                }
            }
        }
    }
}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3b33abe031d46ea86a2ff400ae8a596.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASHVtb0NoZW45OQ==,size_20,color_FFFFFF,t_70,g_se,x_16)

posted @ 2022-02-21 17:11  HumorChen99  阅读(1)  评论(0编辑  收藏  举报  来源