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
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