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