查看原文
其他

439,剑指 Offer-从上到下打印二叉树

山大王wld 数据结构和算法 2022-05-01

Happiness can be found, even in the darkest of times.

可我们总能找到快乐,哪怕处在最黑暗的时期。

问题描述



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


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

    3

   / \

  9  20

    /  \

   15   7

返回:

[3,9,20,15,7]


提示:

  1. 节点总数 <= 1000


BFS解决



其实这就是二叉树的BFS,也可以看下之前讲的373,数据结构-6,树

就是这样,一层一层打印,使用队列解决

1public int[] levelOrder(TreeNode root) {
2    if (root == null)
3        return new int[0];
4    //队列
5    Queue<TreeNode> queue = new LinkedList<>();
6    List<Integer> list = new ArrayList<>();
7    //根节点入队
8    queue.add(root);
9    while (!queue.isEmpty()) {
10        //出队
11        TreeNode node = queue.poll();
12        //把结点值存放到list中
13        list.add(node.val);
14        //左右子节点如果不为空就加入到队列中
15        if (node.left != null)
16            queue.add(node.left);
17        if (node.right != null)
18            queue.add(node.right);
19    }
20    //把list转化为数组
21    int[] res = new int[list.size()];
22    for (int i = 0; i < list.size(); i++) {
23        res[i] = list.get(i);
24    }
25    return res;
26}


递归方式解决



其实这题很明显就是二叉树的宽度优先搜索,使用上面代码就对了。实际上我们还可以改一下,改成DFS并且还是递归的,我想除了我应该没人会这么无聊吧,有兴趣的也可以看下

1public int[] levelOrder(TreeNode root) {
2    List<List<Integer>> list = new ArrayList<>();
3    levelHelper(list, root, 0);
4    List<Integer> tempList = new ArrayList<>();
5    for (int i = 0; i < list.size(); i++) {
6        tempList.addAll(list.get(i));
7    }
8
9    //把list转化为数组
10    int[] res = new int[tempList.size()];
11    for (int i = 0; i < tempList.size(); i++) {
12        res[i] = tempList.get(i);
13    }
14    return res;
15}
16
17public void levelHelper(List<List<Integer>> list, TreeNode root, int height) {
18    if (root == null)
19        return;
20    if (height >= list.size()) {
21        list.add(new ArrayList<>());
22    }
23    list.get(height).add(root.val);
24    levelHelper(list, root.left, height + 1);
25    levelHelper(list, root.right, height + 1);
26}


总结



这题实际上就是二叉树的宽度优先遍历,一层一层打印。



414,剑指 Offer-重建二叉树

400,二叉树的锯齿形层次遍历

373,数据结构-6,树

372,二叉树的最近公共祖先


长按上图,识别图中二维码之后即可关注。


如果觉得有用就点个"赞"吧

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存