Skip to content

Commit 7c94849

Browse files
author
prashant-kr-314
committed
JAVA versions of Iterative-Tree-Traversal Amazing HACK :)
1 parent fb59143 commit 7c94849

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed

IterativeTreeTraversal_JAVA_1.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
// ? ============= USING HASH-MAP =============
3+
4+
import java.util.*;
5+
6+
// ! NOTE : while using this don'toverride the equals()&hashCode()method in Node Class
7+
8+
class Node {
9+
int val;
10+
Node left, right;
11+
12+
Node(int val) {
13+
this.val = val;
14+
left = right = null;
15+
}
16+
}
17+
18+
class IterativeMagic {
19+
20+
public static void traversalTrick(Node root) { // postorder
21+
22+
HashMap<Node, Integer> state = new HashMap<Node, Integer>();
23+
Stack<Node> s = new Stack<Node>();
24+
s.push(root);
25+
26+
while (!s.empty()) {
27+
Node curNode = s.peek();
28+
29+
if (curNode == null) {
30+
s.pop();
31+
continue;
32+
}
33+
34+
int curState;
35+
if (!state.containsKey(curNode))// if no state exits till now - give it a state 0
36+
state.put(curNode, 0);
37+
38+
curState = state.get(curNode);
39+
40+
switch (curState) {
41+
case 0:
42+
s.push(curNode.left);
43+
break;
44+
case 1:
45+
s.push(curNode.right);
46+
break;
47+
case 2:
48+
System.out.print(curNode.val + " ");
49+
break;
50+
default:
51+
s.pop();
52+
}
53+
54+
state.put(curNode, curState + 1); // change its current state : previous state's task done
55+
}
56+
}
57+
58+
}
59+
60+
public class IterativeTreeTraversal_JAVA_1 {
61+
62+
public static void main(String... args) {
63+
Node tmp = new Node(7);
64+
Node root = tmp;
65+
66+
root.left = new Node(3);
67+
root.right = new Node(10);
68+
root.left.left = new Node(2);
69+
root.left.right = new Node(5);
70+
root.left.left.left = new Node(1);
71+
root.right.left = new Node(8);
72+
root.right.right = new Node(5);
73+
74+
IterativeMagic.traversalTrick(tmp);
75+
}
76+
}

IterativeTreeTraversal_JAVA_2.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
2+
// ? ============= WITHOUT HASH-MAP =============
3+
4+
import java.util.*;
5+
import javafx.util.Pair; //? ***
6+
7+
// ! NOTE : while using this don'toverride the equals()&hashCode()method in Node Class
8+
class Node {
9+
int val;
10+
Node left, right;
11+
12+
Node(int val) {
13+
this.val = val;
14+
left = right = null;
15+
}
16+
}
17+
18+
class IterativeMagic {
19+
20+
public static void traversalTrick(Node root) { // ! inorder
21+
22+
Stack<Pair<Node, Integer>> s = new Stack<Pair<Node, Integer>>();
23+
s.push(new Pair<>(root, 0));
24+
25+
while (!s.empty()) {
26+
Pair<Node, Integer> p = s.pop();
27+
Node curNode = p.getKey();
28+
int state = p.getValue();
29+
30+
if (curNode == null || state == 3) {
31+
continue;
32+
}
33+
34+
s.push(new Pair<>(curNode, state + 1)); // new State
35+
36+
switch (state) {
37+
case 0:
38+
s.push(new Pair<>(curNode.left, 0));
39+
break;
40+
case 1:
41+
System.out.print(curNode.val + " ");
42+
break;
43+
case 2:
44+
s.push(new Pair<>(curNode.right, 0));
45+
break;
46+
}
47+
}
48+
}
49+
}
50+
51+
public class IterativeTreeTraversal_JAVA_2 {
52+
53+
public static void main(String... args) {
54+
Node t = new Node(7);
55+
Node root = t;
56+
57+
t.left = new Node(3);
58+
t.right = new Node(10);
59+
t.left.left = new Node(2);
60+
t.left.right = new Node(5);
61+
t.left.left.left = new Node(1);
62+
t.right.left = new Node(8);
63+
t.right.right = new Node(12);
64+
65+
IterativeMagic.traversalTrick(root);
66+
}
67+
}

0 commit comments

Comments
 (0)