From afdff04a694580dfdca6c0a5d4e05ad966b54d23 Mon Sep 17 00:00:00 2001 From: marina <138340846+bt3gl-cryptography@users.noreply.github.com> Date: Mon, 31 Jul 2023 14:00:52 -0700 Subject: [PATCH] Create all_subnotes_bst.py --- dynamic_programming/all_subnotes_bst.py | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 dynamic_programming/all_subnotes_bst.py diff --git a/dynamic_programming/all_subnotes_bst.py b/dynamic_programming/all_subnotes_bst.py new file mode 100644 index 0000000..b0e4eff --- /dev/null +++ b/dynamic_programming/all_subnotes_bst.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + + +def all_possible_bst(start, end, memo): + + result = [] + if start > end: + result.append(None) + return result + + if (start, end) in memo: + return memo[(start, end)] + + for i in range(start, end + 1): + left = all_possible_bst(start, i-1, memo) + right = all_possible_bst(i+1, end, memo) + + for l in left: + for r in right: + root = TreeNode(i, l, r) + result.append(root) + + memo[(start, end)] = result + return result + + +def generateTrees(n) -> List[Optional[TreeNode]]: + + memo = {} + return all_possible_bst(1, n, memo)