Given a binary tree, design an algorithm which creates a linked list of all the nodes at each depth (e.g., if you have a tree with depth D, you'll have D linked lists).
Example
Given binary tree:
1
/
2 3
/
4
return
[
1->null,
2->3->null,
4->null
]
BFS+queue,层级遍历while,套for层内点处理。这种ListNode但只要存储第一个点可用dummy的小技巧。
/** * 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<ListNode> result = new ArrayList<ListNode>(); if (root == null) { return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while (!queue.isEmpty()) { int size = queue.size(); ListNode dummy = new ListNode(-1); ListNode prev = dummy; for (int i = 0; i < size; i++) { TreeNode treeNode = queue.poll(); ListNode crtNode = new ListNode(treeNode.val); prev.next = crtNode; prev = crtNode; if (treeNode.left != null) { queue.offer(treeNode.left); } if (treeNode.right != null) { queue.offer(treeNode.right); } } result.add(dummy.next); } return result; } }