【发布时间】:2019-08-25 10:23:01
【问题描述】:
您好,我正在尝试解决有关 leetcode 的以下问题,[https://leetcode.com/problems/unique-binary-search-trees-ii/]。
我知道我可以访问解决方案,但我尝试以我的方式解决问题,但我被卡住了,我想知道它是否可以按照我的方式解决。 代码如下:
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def generateTrees(myrange, n, res = None):
if res == None:
res = []
if myrange == []:
res.append(None)
return
for root in myrange:
res.append(root)
generateTrees([i for i in range(root) if i in set(myrange)], n, res) #leftchild
generateTrees([i for i in range(root+1, n) if i in set(myrange)], n, res) #rightchild
return res
最初myrange 只是包含节点值的列表,n 是myrange 的长度。
我这样做的方式是一种 DFS,我在节点上循环,使每个节点成为根一次,然后对左右子树执行相同操作以获取所有组合。但我面临的问题是我无法弄清楚如何管理res 以从其中删除元素作为我的递归回溯(并使其res 仅包含有效的bst,然后将它们放入其他一些列表中是我的实际结果)。
如果您认为我的方法是有效的还是坏的,我想要一些指针,甚至只是 cmets ..等等。
【问题讨论】:
-
不确定树输出格式中的顺序是什么。这个问题并没有真正解释这种格式。还是输出
TreeNode的实例的目的?您的代码从不实例化该类? -
你是对的,它不是我试图通过创建一个列表的列表来解决它,这些列表的格式与他们在 leetcode 上的示例相同,当时我本可以输出根节点列表...
标签: python-3.x recursion binary-search-tree