def read(expression: str): stack = list() expr = list(expression) while len(expr) != 0: value = expr.pop(0) if value in numbers: stack.append(Node(value)) elif value in operators: tree = Node(value) tree.right = stack.pop() tree.left = stack.pop() stack.append(tree) else: print('Invalid input: ' + str(value), file=stderr) return stack.pop()
def inorder_traversal(root: BinaryTreeNode): current, stack = root, [] while True: if current: stack.append(current) current = current.left elif len(stack): current = stack.pop() print(current.data) current = current.right else: break if __name__ == "__main__": root = BinaryTreeNode(6) # left side of the tree root.left = BinaryTreeNode(271) root.left.left = BinaryTreeNode(28) root.left.right = BinaryTreeNode(0) root.right = BinaryTreeNode(561) root.right.right = BinaryTreeNode(3) root.right.right.left = BinaryTreeNode(17) inorder_traversal(root)
from utils import BinaryTreeNode from queue import Queue def breadth_first(root: BinaryTreeNode): current, q = root, Queue() q.put(root) while True: if not q.empty(): node = q.get() print(node.data) if node.left: q.put(node.left) if node.right: q.put(node.right) else: break if __name__ == "__main__": root = BinaryTreeNode(1) # left side of the tree root.left = BinaryTreeNode(2) root.left.left = BinaryTreeNode(4) root.left.right = BinaryTreeNode(5) # right side of the tree root.right = BinaryTreeNode(3) breadh_first(root)
else: _right(node.left) nodes.append(node.data) nodes = [root.data] _left(root.left) _leafs(root) _right(root.right) return nodes if __name__ == "__main__": root = BinaryTreeNode(314) # left side of the tree root.left = BinaryTreeNode(6) root.left.left = BinaryTreeNode(271) root.left.right = BinaryTreeNode(561) root.left.left.left = BinaryTreeNode(28) root.left.left.right = BinaryTreeNode(0) root.left.right.right = BinaryTreeNode(3) root.left.right.right.left = BinaryTreeNode(17) # right side of the tree root.right = BinaryTreeNode(6) root.right.left = BinaryTreeNode(2) root.right.left.right = BinaryTreeNode(1) root.right.left.right.left = BinaryTreeNode(401)
return BalancedHeigth(False, 0) right_res = _is_tree_balanced(node.right) if not left_res.balanced: return BalancedHeigth(False, 0) balanced = abs(right_res.height - left_res.height) <= 1 height = max(right_res.height, left_res.height) + 1 return BalancedHeigth(balanced, height) return _is_tree_balanced(root).balanced if __name__ == "__main__": root = BinaryTreeNode("A") # left side of the tree root.left = BinaryTreeNode("B") root.left.left = BinaryTreeNode("C") root.left.right = BinaryTreeNode("H") root.left.left.left = BinaryTreeNode("D") root.left.left.right = BinaryTreeNode("G") root.left.right.left = BinaryTreeNode("I") root.left.right.right = BinaryTreeNode("J") # right side of the tree root.right = BinaryTreeNode("K") root.right.right = BinaryTreeNode("O") root.right.left = BinaryTreeNode("L") root.right.left.right = BinaryTreeNode("N")
if left is not None and right is None: return False if left is None and right is None: return True if left.data != right.data: return False return _is_tree_symmetric(left.left, right.right) and _is_tree_symmetric( left.right, right.left) return _is_tree_symmetric(root.left, root.right) if __name__ == "__main__": root = BinaryTreeNode(314) # left side of the tree root.left = BinaryTreeNode(6) root.left.right = BinaryTreeNode(2) root.left.right.right = BinaryTreeNode(3) root.right = BinaryTreeNode(6) root.right.left = BinaryTreeNode(2) root.right.left.left = BinaryTreeNode(3) print(is_tree_symmetric(root))