码迷,mamicode.com
首页 > 其他好文 > 详细

[GeeksForGeeks] Extract Leaves of a Binary Tree in a Doubly Linked List

时间:2017-09-06 14:35:28      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:ext   imp   binary   rgs   str   create   color   log   output   

Given a Binary Tree, extract all leaves of it in a Doubly Linked List (DLL). Note that the DLL need to be created in-place. Assume that the node structure of DLL and Binary Tree is same, only the meaning of left and right pointers are different. In DLL, left means previous pointer and right means next pointer.

Let the following be input binary tree
        1
     /         2       3
   / \         4   5       6
 / \         / 7   8       9   10


Output:
Doubly Linked List
7<->8<->5<->9<->10

Modified Tree:
        1
     /         2       3
   /           4           6


 1 import java.util.LinkedList;
 2 import java.util.Queue;
 3 
 4 public class ExtractLeavesToDLL {
 5     private TreeNode head = null;
 6     private TreeNode tail = null;
 7     public void extractLeaveNodesToDLL(TreeNode root) {
 8         recursionHelper(root);
 9     }
10     private boolean recursionHelper(TreeNode node) {
11         if(node == null) {
12             return false;
13         }
14         else if(node.left == null && node.right == null) {
15             if(head == null) {
16                 head = node;
17                 tail = node;
18             }
19             else {
20                 tail.right = node;
21                 node.left = tail;
22                 tail = node;
23             }
24             return true;
25         }
26         if(recursionHelper(node.left)) {
27             node.left = null;
28         }
29         if(recursionHelper(node.right)) {
30             node.right = null;
31         }
32         return false;
33     }
34     private void traverseDLL(TreeNode head) {
35         TreeNode curr = head;
36         while(curr != null) {
37             String prevNode = curr.left == null ? "null" : Integer.toString(curr.left.key);
38             String nextNode = curr.right == null ? "null" : Integer.toString(curr.right.key);
39             System.out.println(curr.key + "‘s prev node is " + prevNode + " and its next node is " + nextNode);
40             curr = curr.right;
41         }
42     }
43     private void traverseBT(TreeNode root) {
44         Queue<TreeNode> queue = new LinkedList<TreeNode>();
45         queue.add(root);
46         
47         while(!queue.isEmpty()) {
48             TreeNode curr = queue.poll();
49             String leftNode = curr.left == null ? "null" : Integer.toString(curr.left.key);
50             String rightNode = curr.right == null ? "null" : Integer.toString(curr.right.key);
51             System.out.println(curr.key + "‘s left node is " + leftNode + " and its right node is " + rightNode);
52             if(curr.left != null) {
53                 queue.add(curr.left);
54             }
55             if(curr.right != null) {
56                 queue.add(curr.right);
57             }
58         }
59     }
60     public static void main(String[] args) {
61         TreeNode[] nodes = new TreeNode[10];
62         for(int i = 0; i < nodes.length; i++) {
63             nodes[i] = new TreeNode(i + 1);
64         }
65         nodes[0].left = nodes[1]; nodes[0].right = nodes[2];
66         nodes[1].left = nodes[3]; nodes[1].right = nodes[4];
67         nodes[2].right = nodes[5];
68         nodes[3].left = nodes[6]; nodes[3].right = nodes[7];
69         nodes[5].left = nodes[8]; nodes[5].right = nodes[9];
70         ExtractLeavesToDLL test = new ExtractLeavesToDLL();
71         test.extractLeaveNodesToDLL(nodes[0]);
72         
73         //check dll is correctly constructed 
74         test.traverseDLL(test.head);
75         //check binary tree is correctly modified.
76         test.traverseBT(nodes[0]);
77     }
78 }

 



[GeeksForGeeks] Extract Leaves of a Binary Tree in a Doubly Linked List

标签:ext   imp   binary   rgs   str   create   color   log   output   

原文地址:http://www.cnblogs.com/lz87/p/7426057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!