-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIterative postorder
130 lines (103 loc) · 2.82 KB
/
Iterative postorder
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//Iterative postorder
import java.util.LinkedList;
import java.util.Queue;
import java.io.*;
import java.util.*;
class Node {
int data;
Node left;
Node right;
Node(int data) {
this.data = data;
left = null;
right = null;
}
}
class GfG {
static Node buildTree(String str) {
if(str.length() == 0 || str.charAt(0) == 'N') {
return null;
}
String ip[] = str.split(" ");
Node root = new Node(Integer.parseInt(ip[0]));
Queue<Node> queue = new LinkedList<>();
queue.add(root);
int i = 1;
while (queue.size() > 0 && i < ip.length) {
Node currNode = queue.peek();
queue.remove();
String currVal = ip[i];
if(!currVal.equals("N")) {
currNode.left = new Node(Integer.parseInt(currVal));
queue.add(currNode.left);
}
i++;
if(i >= ip.length) {
break;
}
currVal = ip[i];
if(!currVal.equals("N")) {
currNode.right = new Node(Integer.parseInt(currVal));
queue.add(currNode.right);
}
i++;
}
return root;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
while(t > 0) {
String s = br.readLine();
Node root = buildTree(s);
Tree g = new Tree();
ArrayList<Integer> res = g.postOrder(root);
for(int i = 0; i < res.size(); i++) {
System.out.print(res.get(i) + " ");
}
System.out.print("\n");
t--;
}
}
}
class Node{
int data;
Node left;
Node right;
Node(int data){
this.data = data;
left=null;
right=null;
}
}
class Tree {
ArrayList<Integer> postOrder(Node node) {
ArrayList<Integer> post = new ArrayList<>();
if(node == null) {
return post;
}
Stack<Node> st = new Stack<>();
Node cur = node;
while(cur != null || !st.isEmpty()) {
if(cur != null) {
st.push(cur);
cur = cur.left;
}
else {
Node temp = st.peek().right;
if(temp == null) {
temp = st.pop();
post.add(temp.data);
while(!st.isEmpty() && temp == st.peek().right) {
temp = st.pop();
post.add(temp.data);
}
}
else {
cur = temp;
}
}
}
return post;
}
}