|
4 | 4 | import java.util.LinkedList; |
5 | 5 | import java.util.List; |
6 | 6 | import java.util.Queue; |
| 7 | +import java.util.Stack; |
7 | 8 |
|
8 | 9 | public class BST { |
9 | 10 | TreeNode root; |
10 | 11 |
|
11 | 12 | public BST() { |
12 | 13 | } |
13 | 14 |
|
14 | | - public void Insert(int key) { |
| 15 | + public void insert(int key) { |
15 | 16 | TreeNode node = new TreeNode(key); |
16 | 17 | TreeNode pre = null, runner = root; |
17 | 18 | while (runner != null) { |
@@ -170,4 +171,72 @@ public void printTree() { |
170 | 171 | } |
171 | 172 | } |
172 | 173 | } |
| 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 | + } |
173 | 242 | } |
0 commit comments