示例#1
0
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)
示例#3
0
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)
示例#4
0
        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)
示例#5
0
            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))