描述
中文
给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有 D 层,那么你需要创建 D 条链表。
样例
样例 1:
输入: {1,2,3,4}
输出: [1->null,2->3->null,4->null]
解释:
1
/
2 3
/
4
样例 2:
输入: {1,#,2,3}
输出: [1->null,2->null,3->null]
解释:
1
2
/
3
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
/**
* @param root the root of binary tree
* @return a lists of linked list
*/
public List<ListNode> binaryTreeToLists(TreeNode root) {
// Write your code here
List<List<Integer>> result = new ArrayList<>();
List<ListNode> resultNode = new ArrayList<>();
//判断根节点是否为空
if (root == null) {
return resultNode;
}
//定义一个队列,并添加根节点
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
TreeNode node = null;
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> level = new ArrayList<>();
for (int i = 0; i < size; i++) {
node = queue.poll();
level.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
result.add(level);
}
for (int i = 0; i < result.size(); i++) {
ListNode temp = new ListNode(result.get(i).get(0));
ListNode head = temp;
for (int j = 1; j < result.get(i).size(); j++) {
temp.next = new ListNode(result.get(i).get(j));
temp = temp.next;
}
resultNode.add(head);
}
return resultNode;
}
}