Exemplo n.º 1
0
def bst_sequences_backtrack(nums: List[int]) -> List[List[int]]:
    tree = Tree.create_bst(tree_vals)
    root = tree.root

    ret = []
    level = 0

    # use level to trace the depth for recusion for debugging
    def backtrack(choices, weave, level=0):
        if not choices:
            ret.append(weave)

        for i in range(len(choices)):
            # pick node to put in weave
            node = choices[i]

            # new next choices = remaning next choices + the picked node's children
            next_choices = choices[:i] + choices[i + 1:]
            if node.left: next_choices.append(node.left)
            if node.right: next_choices.append(node.right)

            backtrack(next_choices, weave + [node.val], level + 1)

    backtrack([root], [])

    return ret
Exemplo n.º 2
0
def bst_sequences(nums: List[int]) -> List[List[int]]:
    tree = Tree.create_bst(tree_vals)
    root = tree.root

    def fn(node) -> List[List[int]]:
        if not node:
            return [[]]

        ret = []
        left = fn(node.left)
        right = fn(node.right)
        for seq_left in left:
            for seq_right in right:
                weave(seq_left, seq_right, [node.val], ret)
        return ret

    return fn(root)