1. 程式人生 > 實用技巧 >vue入門案例及抽取程式碼片段

vue入門案例及抽取程式碼片段

95. 不同的二叉搜尋樹 II

Difficulty: 中等

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

Solution

Language: 全部題目

# 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:
  def generateTrees(self, n: int) -> List[TreeNode]:
    if not n: return []
    
    def helper(start, end):
      if start > end: return [None,]
​
      res = []
      for i in range(start, end + 1): # start=end的時候該迴圈還可以進行一次,此時左子樹和右子樹都為None,根節點為i
        lTree = helper(start, i-1)
        rTree = helper(i+1, end)
        for l in lTree:
          for r in rTree:
            node = TreeNode(i)
            node.left = l
            node.right = r
            res.append(node)
      return res
​
    return helper(1,n)