面试题 04.03. 特定深度节点链表

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。

示例:

输入:[1,2,3,4,5,null,7,8]

1 / \

2 3 / \ \ 4 5 7 / 8

输出:[[1],[2,3],[4,5,7],[8]]

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/list-of-depth-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:
  • 二叉树层序遍历
  • 把每一层的数据串成一个链表
  • 将每一个链表加入数组
  • 最终返回数组即可

代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 // 二叉树的层序遍历
    // 把每一层的元素串成一个链表
    // 将链表分别加入数组
    // 最终返回数组即可
    public ListNode[] listOfDepth(TreeNode tree) {
        if (tree == null) return null;

        ArrayList<ListNode> arrayList = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(tree);

        while (!queue.isEmpty()){
            int size = queue.size();

            ListNode listnode = new ListNode(-1);
            ListNode cur = listnode;
            while (size > 0){

                TreeNode node = queue.remove();
                if (node.left != null) queue.add(node.left);
                if (node.right != null) queue.add(node.right);

                cur.next = new ListNode(node.val);
                cur = cur.next;
                size --;
            }

            arrayList.add(listnode.next);
        }

        return arrayList.toArray(ListNode[]::new);
    }