栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

leetcode第96题python版不同的二叉搜索树双层循环递推法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode第96题python版不同的二叉搜索树双层循环递推法

class Solution:
    """
    96. 不同的二叉搜索树
    给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
    """
    def numTrees(self, n: int) -> int:
        # 思路:双层循环递推法,抽象出数学公式,假设f(i)表示i个节点组成的不同二叉树的数目,
        # 抽象成[1, i]闭区间内,以j节点分割两个左右子树数目f(j-1)、f(i-j)的乘积和,其中j从1遍历到i
        # 1. 初始化及特殊处理
        if n == 1: return 1
        # 初始化f数组, 存放f(i)的值, n+1个表示f(0)也算进去,表示左右子树存在0个节点的情况 
        f = [0]*(n+1)
        f[0] = 1 
        
        # 2. 双层遍历处理
        for i in range(1, n+1):
            # j作为左右子树分割点
            for j in range(1, i+1):
                # j-1代表左子树j-1个节点,i-j代表右子树i-j个节点
                # 比如1个节点的情况,左右子树分割点是1,左右子树的数量都是0
                f[i] += f[j-1] * f[i-j]

        # 3. 返回结果值
        return f[n]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030552.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号