/ eg_bst.py
eg_bst.py
1 from typing import List 2 from eg_deque import Deque 3 4 5 class BSTNode: 6 def __init__(self, x, left=None, right=None): 7 self.val, self.left, self.right = x, left, right 8 9 10 def level_order(root: BSTNode) -> List[int]: 11 traversal = [] 12 queue = Deque() 13 queue.enqueue(root) 14 while queue.size > 0: 15 node = queue.dequeue() 16 traversal.append(node.val) 17 if node.left is not None: 18 queue.enqueue(node.left) 19 if node.right is not None: 20 queue.enqueue(node.right) 21 return traversal 22 23 24 def pre_order(root: BSTNode) -> List[int]: 25 traversal = [] 26 stack = Deque() 27 stack.push(root) 28 while stack.size > 0: 29 node = stack.pop() 30 traversal.append(node.val) 31 if node.right is not None: 32 stack.push(node.right) 33 if node.left is not None: 34 stack.push(node.left) 35 return traversal 36 37 38 def in_order(root: BSTNode) -> List[int]: 39 traversal = [] 40 stack = Deque() 41 cur = root 42 while cur is not None or stack.size > 0: 43 if cur is not None: 44 stack.push(cur) 45 cur = cur.left 46 else: 47 cur = stack.pop() 48 traversal.append(cur.val) 49 cur = cur.right 50 return traversal 51 52 53 def post_order(root: BSTNode) -> List[int]: 54 s1, s2 = Deque(), Deque() 55 s1.push(root) 56 while s1.size > 0: 57 node = s1.pop() 58 s2.push(node) 59 if node.left is not None: 60 s1.push(node.left) 61 if node.right is not None: 62 s1.push(node.right) 63 64 traversal = [] 65 while s2.size > 0: 66 traversal.append(s2.pop().val) 67 return traversal 68 69 70 def zig_zag(root: BSTNode) -> List[int]: 71 pass 72 73 74 """ ========== Testing BST ========== """ 75 # Example from: geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/ 76 77 def test_bst(): 78 n4 = BSTNode(4) 79 n12 = BSTNode(12) 80 n18 = BSTNode(18) 81 n24 = BSTNode(24) 82 n31 = BSTNode(31) 83 n44 = BSTNode(44) 84 n66 = BSTNode(66) 85 n90 = BSTNode(90) 86 87 n10 = BSTNode(10, n4, n12) 88 n22 = BSTNode(22, n18, n24) 89 n35 = BSTNode(35, n31, n44) 90 n70 = BSTNode(70, n66, n90) 91 92 n15 = BSTNode(15, n10, n22) 93 n50 = BSTNode(50, n35, n70) 94 95 r = BSTNode(25, n15, n50) 96 97 # print(level_order(r)) 98 # print(pre_order(r)) 99 # print(in_order(r)) 100 print(post_order(r)) 101 102 103 test_bst()