12
12
* @author asadp
13
13
*/
14
14
public class PreInReconstruct {
15
+ static ArrayList <Node > treeNodes = new ArrayList <Node >();
15
16
class Node {
16
17
int item ;
17
18
Node left ,right ;
@@ -21,34 +22,80 @@ public Node(int key) {
21
22
left = right = null ;
22
23
}
23
24
}
24
- ArrayList <Node > nodes = new ArrayList <Node >();
25
+ Node treeNodeForItem (int key ){
26
+ for (Node node : treeNodes ){
27
+ if (node .item == key ){
28
+ return node ;
29
+ }
30
+ }
31
+ Node node = new Node (key );
32
+ treeNodes .add (node );
33
+ return node ;
34
+ }
35
+
25
36
void preInReconstruct (int preOrder [], int inOrder []){
26
- Node root = new Node (preOrder [0 ]);
37
+ if (preOrder .length == 0 || inOrder .length == 0 ){
38
+ return ;
39
+ }
40
+ Node root = treeNodeForItem (preOrder [0 ]);
27
41
int index = 0 ;
28
42
for (int i = 0 ; i < inOrder .length ; i ++){
29
43
if (inOrder [i ] == root .item ){
30
44
index = i ;
31
45
break ;
32
46
}
33
47
}
48
+ System .out .println ("index: " + index );
34
49
int inOrderLeft [] = new int [index ];
35
50
int inOrderRight [] = new int [inOrder .length - index -1 ];
36
51
for (int i = 0 ; i < index ; i ++){
37
52
inOrderLeft [i ] = inOrder [i ];
53
+ System .out .print (inOrderLeft [i ] + " " );
38
54
}
55
+ System .out .println ("" );
39
56
for (int i = 0 ; i < inOrder .length - index -1 ; i ++){
40
- inOrderRight [i ] = inOrder [i + index ];
57
+ inOrderRight [i ] = inOrder [i + index + 1 ];
58
+ System .out .print (inOrderRight [i ] + " " );
41
59
}
60
+ System .out .println ("" );
42
61
int preOrderLeft [] = new int [index ];
43
62
int preOrderRight [] = new int [inOrder .length - index -1 ];
44
63
for (int i = 0 ; i < index ; i ++){
45
64
preOrderLeft [i ] = preOrder [i + 1 ];
65
+ System .out .print (preOrderLeft [i ] + " " );
46
66
}
67
+ System .out .println ("" );
47
68
for (int i = 0 ; i < inOrder .length - index -1 ; i ++){
48
- preOrderRight [i ] = inOrder [i + index + 1 ];
69
+ preOrderRight [i ] = preOrder [i + index + 1 ];
70
+ System .out .print (preOrderRight [i ] + " " );
49
71
}
72
+ System .out .println ("" );
73
+ if (preOrderLeft .length > 0 ){
74
+ Node left = treeNodeForItem (preOrderLeft [0 ]);
75
+ root .left = left ;
76
+ System .out .println ("left: " + left .item );
77
+ }
78
+ if (preOrderRight .length > 0 ){
79
+ Node right = treeNodeForItem (preOrderRight [0 ]);
80
+ root .right = right ;
81
+ System .out .println ("right: " + right .item );
82
+ }
50
83
51
- root .left = preOrderLeft [0 ];
52
-
84
+ preInReconstruct (preOrderLeft , inOrderLeft );
85
+ preInReconstruct (preOrderRight , inOrderRight );
86
+ }
87
+ void printTreeNodes (){
88
+ for (Node node : treeNodes ){
89
+ System .out .println ("Node item: " + node .item
90
+ + " left: " + (node .left == null ? "null" : node .left .item )
91
+ + " right: " + (node .right == null ? "null" : node .right .item ));
92
+ }
93
+ }
94
+ public static void main (String [] args ) {
95
+ PreInReconstruct pIR = new PreInReconstruct ();
96
+ int preOrder [] = {-1 };
97
+ int inOrder [] = {-1 };
98
+ pIR .preInReconstruct (preOrder , inOrder );
99
+ pIR .printTreeNodes ();
53
100
}
54
101
}
0 commit comments