def constructTree(preorderArray):
    stack = []

    root = BST.BinaryTreeNode(preorderArray[0])
    stack.append(root)

    for value in preorderArray[1:]:
        if value < stack[-1].data:
            new_left_node = BST.BinaryTreeNode(value)
            stack[-1].left = new_left_node
            stack.append(new_left_node)
        else:
            while stack and stack[-1].data < value:
                last = stack.pop()
            last.right = BST.BinaryTreeNode(value)
            stack.append(last.right)
    return root
def constructBST(sortedArr):
    if len(sortedArr) <= 0:
        return None
    middle_distance = len(sortedArr) // 2
    middle_element = sortedArr[middle_distance]
    root = BST.BinaryTreeNode(middle_element)
    root.left = constructBST(sortedArr[:middle_distance])
    root.right = constructBST(sortedArr[middle_distance + 1:])
    return root
Exemple #3
0
def flattenBST(root):
    global prev
    if root is None:
        return
    dummy = BST.BinaryTreeNode(-1)
    prev = dummy
    flattenBSTHelper(root)
    prev.left = None
    prev.right = None
    ret = dummy.right
    return ret