給定乙個整數 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 種不同結構的二叉搜尋樹:
13321
\ /
// \ \
321132/
/ \ \
2123
思想:
分治,對於第k個數,把問題分解為求解小於k的左子樹集合和大於k的右子樹集合,兩個集合的迴圈組合即為第k個數作為根節點的解。
採用遞迴實現,邊界條件為子樹有0個或1個元素
**:
# definition for a binary tree node.
# class treenode:
# def __init__
(self, x)
:# self.val = x
# self.left = none
# self.right = none
class solution:
def generatetrees
(self, n:
int)
-> list[treenode]
: listn =
[i for i in range(1
, n+1)
] def gt
(list)
: res =
if not list:
return
[none]
iflen
(list)==1
:return
[treenode
(list[0]
)]for k in range
(len
(list)):
for left in gt
(list[
:k])
:for right in gt
(list[k+1:
]): node =
treenode
(list[k]
) node.left = left
node.right = right
res.
(node)
return res
if n==0:
return
return
gt(listn)
Day 23 不同的二叉搜尋樹 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 ...
不同的二叉搜尋樹
題目 力扣 解題思路 可以看注釋 class solution return helper choice,k choice表示選擇,按大小順序排列,k表示取第k個序列,從1開始計數 public string helper listchoice,int k 以某一元素開頭的序列個數,一共有n n個 ...
不同的二叉搜尋樹
leetcode演算法 演算法題 動態規劃 dp i 代表的是長度為i的序列所能構成多少個不同的二叉搜尋樹 f x,i 代表的是以x為根,長度為i所能構成的不同的二叉搜尋樹的種類 那麼dp i f 1,i f 2,i f i,i 同時f x,i 的公式也出來了1 2 3 4 x i 1 i 可以發現...