前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【leetcode刷题】20T49-不同的二叉搜索树

【leetcode刷题】20T49-不同的二叉搜索树

作者头像
木又AI帮
发布2020-06-17 17:22:27
3060
发布2020-06-17 17:22:27
举报
文章被收录于专栏:木又AI帮

木又同学2020年第49篇解题报告

leetcode第96题:不同的二叉搜索树

https://leetcode-cn.com/problems/unique-binary-search-trees


【题目】

给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?

代码语言:javascript
复制
示例:
输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

【思路】

这是一道动态规划题目。

对于二叉搜索树,每个节点的左右子树都是二叉搜索树。

使用dp[i]表示二叉搜索树个数,那么 dp[i] = sum(dp[j] * dp[k]),其中j+k+1为i,j、k分别为遍历时左子树、右子树的节点个数。

【代码】

python版本

代码语言:javascript
复制
class Solution(object):
    def numTrees(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 3:
            return n

        dp = [0] * (n + 1)
        dp[1], dp[2] = 1, 2
        for i in range(3, n + 1):
            # dp[i] = sum(dp[j] * dp[k])
            # j, k 为当前下标前的元素个数,当前下标后的元素个数
            for j in range(i):
                add_one = 1 if j == 0 else dp[j]
                add_two = 1 if j == i - 1 else dp[i - j - 1]
                dp[i] += add_one * add_two
        return dp[-1]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 木又AI帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档