lintcode242- Convert Binary Tree to Linked Lists by Depth- easy

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;
    }
}

 


posted @ 2017-10-22 14:15  jasminemzy  阅读(313)  评论(0编辑  收藏  举报