Skip to content

Commit fbbb976

Browse files
committed
Adding Iterative Tree Traversal APIs
1 parent 2db7ce3 commit fbbb976

File tree

3 files changed

+88
-15
lines changed

3 files changed

+88
-15
lines changed

BinarySearchTree/BST.java

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
import java.util.LinkedList;
55
import java.util.List;
66
import java.util.Queue;
7+
import java.util.Stack;
78

89
public class BST {
910
TreeNode root;
1011

1112
public BST() {
1213
}
1314

14-
public void Insert(int key) {
15+
public void insert(int key) {
1516
TreeNode node = new TreeNode(key);
1617
TreeNode pre = null, runner = root;
1718
while (runner != null) {
@@ -170,4 +171,72 @@ public void printTree() {
170171
}
171172
}
172173
}
174+
175+
private void printUtil(List<Integer> list, String traversalType) {
176+
System.out.println("Binary Search Tree Iterative " + traversalType + " Traversal");
177+
for (int d : list) {
178+
System.out.print(d + " ");
179+
}
180+
System.out.println();
181+
}
182+
183+
public void inorderTraversal() {
184+
List<Integer> list = new ArrayList<Integer>();
185+
Stack<TreeNode> stack = new Stack<TreeNode>();
186+
TreeNode runner = root;
187+
while (runner != null || !stack.isEmpty()) {
188+
if (runner != null) {
189+
stack.push(runner);
190+
runner = runner.left;
191+
}
192+
else {
193+
TreeNode top = stack.pop();
194+
list.add(top.key);
195+
runner = top.right;
196+
}
197+
}
198+
printUtil(list, "Inorder");
199+
}
200+
201+
public void preorderTraversal() {
202+
List<Integer> list = new ArrayList<Integer>();
203+
Stack<TreeNode> stack = new Stack<TreeNode>();
204+
TreeNode runner = root;
205+
while (runner != null || !stack.isEmpty()) {
206+
if (runner != null) {
207+
list.add(runner.key);
208+
if (runner.right != null) {
209+
stack.add(runner.right);
210+
}
211+
runner = runner.left;
212+
}
213+
else {
214+
runner = stack.pop();
215+
}
216+
}
217+
printUtil(list, "Preorder");
218+
}
219+
220+
public void postorderTraversal() {
221+
List<Integer> list = new ArrayList<Integer>();
222+
Stack<TreeNode> stack = new Stack<TreeNode>();
223+
TreeNode runner = root, pre = null;
224+
while (runner != null || !stack.isEmpty()) {
225+
if (runner != null) {
226+
stack.push(runner);
227+
runner = runner.left;
228+
}
229+
else {
230+
TreeNode top = stack.peek();
231+
if (top.right == null || top.right == pre) {
232+
list.add(top.key);
233+
pre = stack.pop();
234+
}
235+
else {
236+
runner = top.right;
237+
}
238+
}
239+
}
240+
printUtil(list, "Postorder");
241+
}
173242
}

BinarySearchTree/TestClient.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,24 @@ public class TestClient {
55
public static void main(String[] args) {
66
//using example on page 263 in CLRS
77
BST bst = new BST();
8-
bst.Insert(15);
9-
bst.Insert(5);
10-
bst.Insert(3);
11-
bst.Insert(12);
12-
bst.Insert(10);
13-
bst.Insert(13);
14-
bst.Insert(6);
15-
bst.Insert(7);
16-
bst.Insert(16);
17-
bst.Insert(20);
18-
bst.Insert(18);
19-
bst.Insert(23);
20-
// bst.printTree();
8+
bst.insert(15);
9+
bst.insert(5);
10+
bst.insert(3);
11+
bst.insert(12);
12+
bst.insert(10);
13+
bst.insert(13);
14+
bst.insert(6);
15+
bst.insert(7);
16+
bst.insert(16);
17+
bst.insert(20);
18+
bst.insert(18);
19+
bst.insert(23);
20+
21+
bst.inorderTraversal();
22+
bst.preorderTraversal();
23+
bst.postorderTraversal();
24+
25+
//bst.printTree();
2126

2227
TreeNode key = bst.search(15);
2328
TreeNode next = bst.getPredecessor(key);

BinarySearchTree/TreeNode.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package BinarySearchTree;
22

33
public class TreeNode {
4-
54
int key;
65
TreeNode left, right, parent;
76

0 commit comments

Comments
 (0)