def upsideDownBinaryTree2(self, root: nd.node) -> nd.node:
        stack = [(root, False)]
        tree = []

        while stack:
            node, visited = stack.pop()

            if visited:
                tree.append(node.val)
            else:
                if node:
                    stack.append((node.right, False))
                    stack.append((node, True))
                    stack.append((node.left, False))

        tree.reverse()
        root2 = nd.node(tree.pop())
        dq = collections.deque([root2])
        while tree:
            node = dq.popleft()
            if not node.right:
                node.right = nd.node(tree.pop())
                dq.append(node.right)
            if tree and not node.left:
                node.left = nd.node(tree.pop())
                dq.append(node.left)

        return root2
Exemplo n.º 2
0
    def build_tree1(self):
        tree = nd.node(4)
        tree.left = nd.node(2)
        tree.right = nd.node(5)

        tree.left.left = nd.node(1)
        tree.left.right = nd.node(3)
        return tree
Exemplo n.º 3
0
def build_tree2():
    tree = nd.node(7)
    tree.left = nd.node(3)
    #tree.left.left = nd.node(3)
    #tree.left.right = nd.node(4)

    tree.right = nd.node(15)
    tree.right.left = nd.node(9)
    tree.right.right = nd.node(20)
    return tree
Exemplo n.º 4
0
def build_sym_tree2():
    tree = nd.node(5)
    tree.left = nd.node(1)
    #tree.left.left = nd.node(3)
    #tree.left.right = nd.node(4)

    tree.right = nd.node(4)
    tree.right.left = nd.node(3)
    tree.right.right = nd.node(6)
    return tree
Exemplo n.º 5
0
    def build_tree1(self):
        tree = nd.node(5)
        tree.left = nd.node(2)
        tree.right = nd.node(12)

        tree.left.left = nd.node(1)
        tree.left.right = nd.node(3)

        tree.right.left = nd.node(9)
        tree.right.right = nd.node(21)

        tree.right.right.left = nd.node(19)
        tree.right.right.right = nd.node(25)
        return tree
Exemplo n.º 6
0
def array_to_tree(data):
    data.reverse()
    root = tree.node(data.pop())

    dq = collections.deque()
    dq.append(root)

    while data:
        node = dq.popleft()
        if not node.left:
            node.left = tree.node(data.pop())
            dq.append(node.left)

        if data and not node.right:
            node.right = tree.node(data.pop())
            dq.append(node.right)

    return root
Exemplo n.º 7
0
        def _deserialize(array):
            if not array:
                return None

            root = None
            value = array.pop()
            if value is not None:
                root = nd.node(value)
                root.left = _deserialize(array)
                root.right = _deserialize(array)
            return root
Exemplo n.º 8
0
    def deserialize_level(self, data) -> int:
        data.reverse()

        root = nd.node(data.pop())
        dq = collections.deque([root])

        while data:
            node = dq.popleft()

            val = data.pop()
            if val is not None:
                node.left = nd.node(val)
                dq.append(node.left)

            if data:
                val = data.pop()
                if val is not None:
                    node.right = nd.node(val)
                    dq.append(node.right)

        return root
Exemplo n.º 9
0
def build_sym_tree():
    tree = nd.node(1)
    tree.left = nd.node(2)
    tree.left.left = nd.node(3)
    tree.left.right = nd.node(4)

    tree.right = nd.node(2)
    tree.right.left = None  #nd.node(4)
    tree.right.right = nd.node(3)
    return tree
Exemplo n.º 10
0
 def build_tree2(self):
     tree = nd.node(1)
     tree.right = nd.node(8)
     return tree
Exemplo n.º 11
0
def build_tree():
    tree = nd.node(2)
    tree.left = nd.node(1)
    tree.right = nd.node(3)
    return tree
Exemplo n.º 12
0
 def insert(self, value):
     if not self.tree:
         self.tree = nd.node(value)
     else:
         self.tree.insert_level(value)
Exemplo n.º 13
0
 def test_2(self):
     self.assertEqual(
         5,
         self.lowestCommonAncestor(
             hlp.array_to_tree([3, 5, 1, 6, 2, 0, 8, None, None, 7, 4]),
             nd.node(5), nd.node(4)))
Exemplo n.º 14
0
 def test_2(self):
     self.assertEqual(nd.node(1),
                      self.deserialize([1, 2, 3, None, None, 4, 5]))
Exemplo n.º 15
0
def build_sym_tree3():
    tree = nd.node(5)
    return tree
Exemplo n.º 16
0
 def test_2(self):
     self.assertEqual(
         2,
         self.lowestCommonAncestor(
             hlp.array_to_tree([6, 2, 8, 0, 4, 7, 9, None, None, 3, 5]),
             nd.node(2), nd.node(4)))