-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy paththreeTreeIteration.java
103 lines (92 loc) · 2.6 KB
/
threeTreeIteration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import java.util.*;
public class threeTreeIteration {
static class Node {
int data;
Node left, right;
Node(int data){
this.data = data;
this.left = null;
this.right = null;
}
}
static class Pair {
Node node;
int count;
Pair(Node node, int count) {
this.node = node;
this.count = count;
}
}
public static void threeIteration(Node root){
if( root == null ) return;
ArrayList<Integer> preorder = new ArrayList<Integer>();
ArrayList<Integer> postorder = new ArrayList<Integer>();
ArrayList<Integer> inorder = new ArrayList<Integer>();
Stack<Pair> s = new Stack<Pair>();
s.push(new Pair(root, 1));
while( !s.isEmpty() ){
Pair curr = s.pop();
if( curr.count == 1 ){
preorder.add(curr.node.data);
s.add(new Pair(curr.node, curr.count + 1));
if( curr.node.left != null )
s.add(new Pair(curr.node.left, 1));
}else if(curr.count == 2){
inorder.add(curr.node.data);
s.add(new Pair(curr.node, curr.count + 1));
if( curr.node.right != null )
s.add(new Pair(curr.node.right, 1));
}else if(curr.count == 3){
postorder.add(curr.node.data);
}
}
System.out.println();
for(int i = 0; i < preorder.size(); i++){
System.out.print(preorder.get(i) + " ");
}
System.out.println();
for(int i = 0; i < inorder.size(); i++){
System.out.print(inorder.get(i) + " ");
}
System.out.println();
for(int i = 0; i < postorder.size(); i++){
System.out.print(postorder.get(i) + " ");
}
}
public static void preorder(Node root){
if(root == null) return;
System.out.print(root.data + " ");
preorder(root.left);
preorder(root.right);
}
public static void inorder(Node root){
if(root == null) return;
inorder(root.left);
System.out.print(root.data + " ");
inorder(root.right);
}
public static void postorder(Node root){
if(root == null) return;
postorder(root.left);
postorder(root.right);
System.out.print(root.data + " ");
}
public static void main(String[] args){
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.right.left = new Node(4);
root.right.right = new Node(5);
root.left.right = new Node(6);
root.left.right.right = new Node(7);
root.left.right.left = new Node(8);
root.left.right.right.right = new Node(9);
preorder(root);
System.out.println();
inorder(root);
System.out.println();
postorder(root);
System.out.println();
threeIteration(root);
}
}