def insert(self, root: Node, data: int) -> Node:
     if not root:
         return Node(data)
     if data < root.data:
         root.left = self.insert(root.left, data)
     elif data > root.data:
         root.right = self.insert(root.right, data)
     return root
 def deserialize_helper(self, q: queue):
     val = q.get()
     if val == 'X':
         return None
     root = Node(int(val))
     root.left = self.deserialize_helper(q)
     root.right = self.deserialize_helper(q)
     return root
Example #3
0
 def show_mirror_tree(self, root: Node) -> Node:
     if root is None:
         return root
     # temp = root
     self.show_mirror_tree(root.left)
     self.show_mirror_tree(root.right)
     temp = root.left
     root.left = root.right
     root.right = temp
Example #4
0
def main():
    node = Node(1)
    node.left = Node(2)
    node.right = Node(3)
    node.left.left = Node(4)
    node.left.right = Node(5)
    bst = BinarySearchTree()
    print("Pre order traversal of binary tree is")
    bst.pre_order_traversal(node)
    print("In order traversal of binary tree is")
    bst.level_order_traversal(node)
    print("Post order traversal of binary tree is")
    bst.post_order_traversal(node)
def main():
    node = Node(50)
    bst = BinarySearchTree()
    largest_node = LargestNode()
    c = [0]
    k = 4
    bst.insert(node, 30)
    bst.insert(node, 20)
    bst.insert(node, 40)
    bst.insert(node, 70)
    bst.insert(node, 60)
    bst.insert(node, 80)
    largest_node.kth_largest_node(node, k, c)
def main():
    all_nodes = AllNodesAtKDistance()
    node = Node(6)
    bt = BinaryTree()
    bt.insert(node, Node(4))
    x = Node(2)
    y = Node(7)
    bt.insert(node, x)
    bt.insert(node, y)
    bt.insert(node, Node(9))
    bt.insert(node, Node(10))
    print(all_nodes.k_th_distance_node(node, x, 2))
        return root

    def get_child_to_parent_mapping(self, relation: dict, node: Node) -> dict:
        if node is None:
            return
        if node.left is not None:
            relation[node.left] = node
            self.get_child_to_parent_mapping(relation, node.left)
        if node.right is not None:
            relation[node.right] = node
            self.get_child_to_parent_mapping(relation, node.right)
        return relation


if __name__ == '__main__':
    node = Node(7)
    bst = BinarySearchTree()
    bst.insert(node, 4)
    bst.insert(node, 11)
    bst.insert(node, 2)
    bst.insert(node, 6)
    bst.insert(node, 9)
    # bst.insert(node, 1)
    # bst.insert(node, 0)
    # token = bst.serialize(node)
    # print(token)
    # bst.deserialize(token)
    # bst.print_tree(node)
    relation = {}
    relation = bst.get_child_to_parent_mapping(relation, node)
    for child in relation:
Example #8
0
        while len(queue) != 0:
            current_node = queue.pop(0)
            print(current_node.data)
            if current_node.left is not None:
                queue.append(current_node.left)
            if current_node.right is not None:
                queue.append(current_node.right)

    def show_mirror_tree(self, root: Node) -> Node:
        if root is None:
            return root
        # temp = root
        self.show_mirror_tree(root.left)
        self.show_mirror_tree(root.right)
        temp = root.left
        root.left = root.right
        root.right = temp


if __name__ == '__main__':
    node = Node(10)
    bst = BinarySearchTree()
    bst.insert(node, 5)
    bst.insert(node, 23)
    bst.insert(node, 9)
    bst.insert(node, 16)
    bst.insert(node, 0)
    level_order_traversal = LevelOrderTraversal()
    level_order_traversal.show_mirror_tree(node)
    level_order_traversal.level_order(node, [])
class LowestCommonAncestor(object):
    def get_lca(self, root: Node, x: Node, y: Node) -> Node:
        if root is None:
            return
        if root.data == x.data or y.data:
            return root
        left_subtree = self.get_lca(root.left, x, y)
        right_subtree = self.get_lca(root.right, x, y)

        if left_subtree is None:
            return right_subtree
        if right_subtree is None:
            return left_subtree
        return root


if __name__ == '__main__':
    node = Node(6)
    bt = BinaryTree()
    bt.insert(node, Node(4))
    x = Node(2)
    y = Node(7)
    bt.insert(node, x)
    bt.insert(node, y)
    bt.insert(node, Node(9))
    bt.insert(node, Node(10))
    lca = LowestCommonAncestor()
    lca_node = lca.get_lca(node, x, y)
    print(lca_node.data)
Example #10
0
    def get_diagonal_sum(self, root: Node) -> dict:
        answer = {}
        self.calculate_sum(root, 0, answer)
        return answer

    def print_the_tree(self, root: Node):
        if root is None:
            return
        print(root.data)
        self.print_the_tree(root.left)
        self.print_the_tree(root.right)


if __name__ == '__main__':
    node = Node(1)
    bt = BinaryTree()
    bt.insert(node, Node(2))
    bt.insert(node, Node(3))
    bt.insert(node, Node(9))
    bt.insert(node, Node(6))
    bt.insert(node, Node(4))
    bt.insert(node, Node(5))
    bt.insert(node, Node(12))
    bt.insert(node, Node(11))
    bt.insert(node, Node(10))
    ds = DiagonalSum()
    bst_level_order = LevelOrderTraversal()
    bst_level_order.level_order(node, [])
    print(ds.get_diagonal_sum(node).values())