第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 95. 不同的二叉搜索樹(shù) II | Python

標(biāo)簽:
Python 算法

95. 不同的二叉搜索树 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
    /     /       \                 \
   2     1         2                 3

解题思路


思路:递归

这道题跟 96. 不同的二叉搜索树 有点类似。只是 96 题中,只需要求得可构建二叉搜索树的种数。而这道题当中,需要进行建树。

根据二叉搜索树的定义,在题目给定的区间 [1, n] 中,当我们枚举 i(i 属于 [1, n]) 作为根节点时,那么 [1, i-1] 将用以构建左子树,[i+1, n] 将用以构建右子树。

那么: 以 i 为根节点的可构建种类 = 左子树可构建种类 * 右子树可构建种类。

上述结论分析可参考:LeetCode 96. 不同的二叉搜索树 | Python

也就说,以 i 为根节点,从可构建的左子树集合当中选取一个,同时在可构建的右子树集合当中选取一个,与根节点 i 构建一个二叉树搜索树。

具体的代码实现如下。

代码实现


# 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 n == 0:
            return []
        
        def get_all_bts(left, right):
            if left > right:
                return [None]
            if left == right:
                return [TreeNode(left)]

            ans = []
            for i in range(left, right+1):
                # 开始进行枚举
                # 左子树所有可能的情况
                left_sub_trees = get_all_bts(left, i-1)
                # 右子树所有可能的情况
                right_sub_trees = get_all_bts(i+1, right)
                # 从左子树跟右子树集合当中各取一种,与根节点构成二叉搜索树
                for left_sub_tree in left_sub_trees:
                    for right_sub_tree in right_sub_trees:
                        root = TreeNode(i)
                        root.left = left_sub_tree
                        root.right = right_sub_tree
                        ans.append(root)
            return ans
        return get_all_bts(1, n)

实现结果


实现结果

欢迎关注


點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消