Convert Binary Tree to Linked Lists by Depth
This question is the same as Binary Tree Treverse in Level Order. Instead of a list, we need ListNode to remeber the result. The tricky part is that we need to create a dummy node and listNode for traval. Keep moveing the listNode to add next and then add dummy.next to the result list
/** * 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> rst = new ArrayList<ListNode>(); if (root == null) { return rst; } Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); while (!q.isEmpty()) { ListNode dummy = new ListNode(0); ListNode listNode = dummy; int n = q.size(); for (int i = 0; i < n; i++) { TreeNode node = q.poll(); listNode.next = new ListNode(node.val); listNode = listNode.next; if (node.left != null) { q.offer(node.left); } if (node.right != null) { q.offer(node.right); } } rst.add(dummy.next); } return rst; } }
posted on 2017-06-13 09:36 codingEskimo 阅读(416) 评论(0) 编辑 收藏 举报