def insert(root, val): if not root: return Node(val) curr = root while curr: if val < curr.info: if curr.left: curr = curr.left else: curr.left = Node(val) break else: if curr.right: curr = curr.right else: curr.right = Node(val) break return root
from model_tree.node import Node def lca(root, v1, v2): if root.info > max(v1, v2): return lca(root.left, v1, v2) elif root.info < min(v1, v2): return lca(root.right, v1, v2) else: return root if True: root = Node(4, 2, 7, 1, 3, 5) v1 = 1 v2 = 7 result = lca(root, v1, v2) print("Result ", result.info) # 4 if True: root = Node(10, 8, 12, 5, 9, 11, 16, None, None, None, None, None, None, 14, 18, 13, 15) v1 = 13 v2 = 18 result = lca(root, v1, v2) print("Result ", result.info) # 16 if True: root = Node(50, 30, 51, 15, 32, None, None, 10, None, 31, 35, None, None, None, None, 34, 37, 33, 35) v1 = 33
from model_tree.node import Node # linear solution def preOrder(root): stack = [root] while len(stack) > 0: curr = stack.pop() print(curr.info, end=" ") if curr.right: stack.append(curr.right) if curr.left: stack.append(curr.left) if True: root = Node(1, None, 2, None, 5, 3, 6, None, 4) preOrder(root) print() if True: root = Node(1, 2, 3, 4, 5, 6, 7) preOrder(root) print()
from model_tree.node import Node class Solution: def getHeight(self, root): if root is None: return -1 return max(self.getHeight(root.left), self.getHeight(root.right)) + 1 if True: s = Solution() root = Node(3, 2, 5, 1, None, 4, 6, None, None, None, 7) res = s.getHeight(root) print("Result ", res)
def insert(root, val): if not root: return Node(val) curr = root while curr: if val < curr.info: if curr.left: curr = curr.left else: curr.left = Node(val) break else: if curr.right: curr = curr.right else: curr.right = Node(val) break return root if True: root = Node(4, 2, 7, 1, 3) data = 6 result = insert(root, data) print("Result ", result.showFlatTree())
return dfs(root, minval, maxval) def dfs(node, minval, maxval): if node is None: return True if node.info < minval or node.info > maxval: return False return dfs(node.left, minval, node.info - 1) and dfs( node.right, node.info + 1, maxval) if True: root = Node(3, 5, 2, 1, 4, 6) # False result = check_binary_search_tree_(root) print("Result ", result) if True: root = Node(4, 2, 6, 1, 3, 5, 7) # True result = check_binary_search_tree_(root) print("Result ", result) if True: root = Node(7, 5, 9, 3, 6, 8, 12) # True result = check_binary_search_tree_(root) print("Result ", result)
from model_tree.node import Node def height(root): if not root: return -1 lh = height(root.left) rh = height(root.right) return max(lh, rh) + 1 if True: root = Node(1, None, 2, None, 5, 3, 6, None, 4) result = height(root) print("Result ", result) if True: root = Node(3, 2, 5, 1, None, 4, 6, None, None, 7) result = height(root) print("Result ", result)
from model_tree.node import Node def decodeHuff(root, s): ans = str() curr = root for i in s: if i == '0': curr = curr.left elif i == '1': curr = curr.right if not curr.left and not curr.right: ans += curr.info curr = root return ans if True: root = Node('5', '2', 'A', 'B', 'C') s = '1001011' result = decodeHuff(root, s) print("Result ", result)