(力扣每日一題)不同的二叉搜尋樹 II

2021-10-08 08:43:52 字數 1265 閱讀 1550

二叉搜尋樹有以下幾個特點:

(1)、左邊的小於當前;

(2)、右邊的大於當前;

(3)、沒有重複的值。

為了符合二叉搜尋樹的這幾個特點,我們需要知道當前的範圍。(要知道開頭和結尾;最開始是1和n)

1、首先定義乙個字典儲存已遍歷的引數和結果以免重複。

2、特殊情況判斷:如果n == 0,返回,如果不判斷則會返回[none](執行遞迴**會直接返回,因為0<1)。

3、遞迴終止條件:

如果left>right則返回[none]。

以前已經遍歷過當前節點則可以直接返回以前的結果。

當前的值可能是left……right,所以我們要把每乙個都試一遍,每次迴圈都要這麼做:

遞迴得到左和右,將返回列表增加它們的全部組合。(值:當前迴圈變數,左:當前左,右:當前右)

將元組(left,right)作為鍵,返回列表為值加入字典,然後返回。

**

class

solution

:def

generatetrees

(self, n:

int)

-> list[treenode]

:if n ==0:

return

dct =

defleft_right

(left:

int, right:

int)

-> list[treenode]

:if left > right:

return

[none]if

(left, right)

in dct:

return dct[

(left, right)

] ret =

for i in

range

(left, right+1)

: left_lst = left_right(left, i-1)

right_lst = left_right(i+

1, right)

for l in left_lst:

for r in right_lst:

dct[

(left, right)

]= ret

return ret

left_right(

1, n)

return left_right(

1, n)

力扣每日一題 二叉樹的最小深度

原題鏈結 題目描述 給定乙個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最小深度 2.解題思路 dfs即可,只不過注意一下測試用例 1,...

力扣95不同的二叉搜尋樹

自上向下遞迴下去找到所有的樹比較容易,難得是如何如何從下往上返回來把每一棵樹都列印出來,class solution return getans 1,n private vectorgetans int start,int end if start end for int i start i end...

力扣96 不同的二叉搜尋樹

給定乙個整數 n,求以 1 n 為節點組成的二叉搜尋樹有多少種?示例 輸入 3 輸出 5 解釋 給定 n 3,一共有 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 2 2 1 2 3 原題url 這道題看到的第一眼,就和之前的格雷編碼一樣,又想用動態規劃,每次都是遍歷所有情況去...