程序员面试金典-面试题 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]]

分析:

层序遍历,将每层的节点构建成一个链表,将头节点加入到数组中即可。

程序:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode[] listOfDepth(TreeNode tree) {
        List<ListNode> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(tree);
        while(!queue.isEmpty()){
            int len = queue.size();
            ListNode dummyHead = new ListNode(-1);
            ListNode p = dummyHead;
            for(int i = 0; i < len; ++i){
                TreeNode node = queue.poll();
                p.next = new ListNode(node.val);
                p = p.next;
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
            res.add(dummyHead.next);
        }
        //return res.stream().toArray(ListNode[]::new);
        return res.toArray(new ListNode[0]);
    }
}

 

posted @ 2020-03-06 15:27  silentteller  阅读(245)  评论(0编辑  收藏  举报