leetcode 95 不同的二叉搜尋樹 II

2021-10-08 03:27:35 字數 1891 閱讀 3793

給定乙個整數 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 2

/ / \ \

2 1 2 3

0 <= n <= 8
先看簡單版:不同的二叉搜尋樹,不需要求出具體的樹,只需要求數字,則可以簡化。本題需要求出具體的樹

遞迴,對1,2,3節點們,先以1作為根節點,然後遞迴得到後面的數字生成的子樹,再以2為根節點,先遞迴得到左邊的數字的作為左子樹,再遞迴得到右邊數字作為右子樹,再對左右子樹的根節點做笛卡爾積得到所有可能的pair

時間複雜度應該有o(n

3)

o(n^3)

o(n3

)

# 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

:import itertools

defhelper

(self, nodes:

list)-

>

list:if

not nodes:

return

[none]if

len(nodes)==1

:return

[treenode(nodes[0]

)]ans =

for index in

range

(len

(nodes)):

left_nodes = self.helper(nodes[

:index]

) right_nodes = self.helper(nodes[index +1:

])ret_list =

child = itertools.product(left_nodes, right_nodes)

for child_pair in child:

root = treenode(nodes[index]

) root.left = child_pair[0]

root.right = child_pair[1]

ans += ret_list

return ans

defgeneratetrees

(self, n:

int)

-> list[treenode]

:if n ==0:

return

return self.helper(

list

(range(1

, n +1)

))

LeetCode 95 不同的二叉搜尋樹

給定乙個整數 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 ...

leetcode 95 不同的二叉搜尋樹

題目 給定乙個整數 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 ...

Leetcode95 不同的二叉搜尋樹 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 2...