Leetcode talk23不同的二叉搜尋樹

2021-10-04 07:38:09 字數 1523 閱讀 4705

給定乙個整數 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 可以發現...