def to_binary_tree_distinct_vals(lst):
    """
    To build a binary tree
    :param lst: list of list
    [[root, left, right], [root, left, right]]
    :return: head
    """

    tree_dict = dict()  # val : TreeNode(val)
    for node in lst:
        tree_dict[node[0]] = tree_dict.get(node[0], TreeNode(node[0]))
        left_child = None
        if node[1] is not None:
            tree_dict[node[1]] = tree_dict.get(node[1], TreeNode(node[1]))
            left_child = tree_dict[node[1]]

        right_child = None
        if node[2] is not None:
            tree_dict[node[2]] = tree_dict.get(node[2], TreeNode(node[2]))
            right_child = tree_dict[node[2]]

        tree_dict[node[0]].left = left_child
        tree_dict[node[0]].right = right_child

    return tree_dict[lst[0][0]]
        def helper(ins, ine, pts, pte):

            if ins > ine: return None

            root = TreeNode(postorder[pte])
            iroot = inorder.index(postorder[pte])

            jroot = iroot - ins + pts
            root.left = helper(ins, iroot - 1, pts, jroot - 1)
            root.right = helper(iroot + 1, ine, jroot, pte - 1)

            return root
Beispiel #3
0
    def builder(self, insi, inei, preidx):

        if insi > inei: return None

        idx = self.lkp[self.preorder[preidx]]
        """while self.inorder[idx] != self.preorder[preidx]:
            idx += 1"""

        node = TreeNode(self.preorder[preidx])
        node.left = self.builder(insi, idx - 1, preidx + 1)
        node.right = self.builder(idx + 1, inei, preidx + idx - insi + 1)

        return node
Beispiel #4
0
    def __get_tree_two__(self):
        root = TreeNode(6)
        root.left = TreeNode(4)
        root.right = TreeNode(7)

        cur_node = root.left
        cur_node.left = TreeNode(1)
        cur_node.right = TreeNode(5)

        cur_node = root.right
        cur_node.right = TreeNode(9)

        return root
Beispiel #5
0
    def __get_first_tree__(self):
        root = TreeNode(6)
        root.left = TreeNode(4)
        root.right = TreeNode(7)

        cur_node = root.left
        cur_node.left = TreeNode(1)
        cur_node.right = TreeNode(3)

        cur_node = cur_node.right
        cur_node.left = TreeNode(2)

        return root
Beispiel #6
0
    def __get_tree_three__(self):
        root = TreeNode(5)
        root.left = TreeNode(3)
        root.right = TreeNode(6)

        cur_node = root.left
        cur_node.left = TreeNode(1)
        cur_node.right = TreeNode(4)

        cur_node = cur_node.left
        cur_node.right = TreeNode(2)

        return root
Beispiel #7
0
 def __init__(self):
     super(LowestCommonAncestorBstTestCases, self).__init__()
     self.__add_test_case__(
         "Test 1",
         [self.__get_tree_one__(),
          TreeNode(2), TreeNode(8)], TreeNode(6))
     self.__add_test_case__(
         "Test 2",
         [self.__get_tree_one__(),
          TreeNode(2), TreeNode(4)], TreeNode(2))
     self.__add_test_case__(
         "Test 3",
         [self.__get_tree_one__(),
          TreeNode(2), TreeNode(0)], TreeNode(2))
Beispiel #8
0
    def __get_tree_one__(self):
        root = TreeNode(3)
        root.left = TreeNode(2)
        root.right = TreeNode(3)

        cur_node = root.left
        cur_node.right = TreeNode(3)

        cur_node = root.right
        cur_node.right = TreeNode(1)

        return root
def to_complete_binary_tree(lst):
    """
    Complete Binary Tree
    :param lst: a list of tree nodes
    :return:
    """
    n = len(lst)
    if n < 1: return None
    tree = [TreeNode(lst[0])]

    for i in xrange(1, n):

        pidx = int(math.floor((i - 1) / 2))
        tree.append(TreeNode(lst[i]))

        if tree[pidx].val == None or lst[i] == None:
            continue

        if i % 2 == 1:
            tree[pidx].left = tree[i]
        else:
            tree[pidx].right = tree[i]

    return tree[0]