# definition for a binary tree node.
class treenode:
def __init__(self, val=0, left=none, right=none):
self.val = val
self.left = left
self.right = right
class solution:def generatetrees(self, n: int) -> list[treenode]:
if not n:
return
return self.new_trees(1, n)
def new_trees(self, start, end):
if start > end:
return [none]
all_trees =
# 針對(start,end)中的每乙個i進行切分,也就是求g(i),判斷左右是否有節點,通過start和end比較
for i in range(start, end + 1):
# 左子樹
left_trees = self.new_trees(start, i - 1)
# 右子樹
right_trees = self.new_trees(i + 1, end)
for left in left_trees:
for right in right_trees:
tree = treenode(i)
tree.left = left
tree.right = right
# print(all_trees)
# 注:每次遞迴進入的子樹的all_trees都是不一樣的。可以通過列印print()檢視控制台的輸出,這樣更容易理解具體的思路。
return all_trees
力扣95不同的二叉搜尋樹
自上向下遞迴下去找到所有的樹比較容易,難得是如何如何從下往上返回來把每一棵樹都列印出來,class solution return getans 1,n private vectorgetans int start,int end if start end for int i start i end...
(力扣) 95 不同的二叉搜尋樹 II
這道題的目的是求出由1到n為節點的所有二叉搜尋樹。首先需要知道二叉搜尋樹的定義。在二叉搜尋樹中,任意取一節點,如果存在左節點,那麼根節點值一定會大於左節點值,同理,如果存在右節點,那麼根結點一定會小於右節點值。通常在涉及構建樹的問題上,可以考慮遞迴,這樣便可以省去重複的 並且這道題可以採用分而治之的...
力扣95 不同的二叉搜尋樹 II
給定乙個整數 n,生成所有由 1 n 為節點所組成的 二叉搜尋樹 示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3...