LeetCode如何解决不同的二叉搜索树问题

这篇文章主要为大家展示了“LeetCode如何解决不同的二叉搜索树问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“LeetCode如何解决不同的二叉搜索树问题”这篇文章吧。

创新互联公司专业为企业提供大安网站建设、大安做网站、大安网站设计、大安网站制作等企业网站建设、网页设计与制作、大安企业网站模板建站服务,10多年大安做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。


 

题目描述

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

示例:

输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
  1         3     3      2      1    \       /     /      / \      \     3     2     1      1   3      2    /     /       \                 \   2     1         2                 3
   

解题方案

 

思路

  • 标签:动态规划

  • 假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则

LeetCode如何解决不同的二叉搜索树问题

  • 当i为根节点时,其左子树节点个数为i-1个,右子树节点为n-i,则

LeetCode如何解决不同的二叉搜索树问题

  • 综合两个公式可以得到卡特兰数[1]公式

LeetCode如何解决不同的二叉搜索树问题

LeetCode如何解决不同的二叉搜索树问题  
算法动图
 

代码

class Solution {    public int numTrees(int n) {        int[] dp = new int[n+1];        dp[0] = 1;        dp[1] = 1;                for(int i = 2; i < n + 1; i++)            for(int j = 1; j < i + 1; j++)                 dp[i] += dp[j-1] * dp[i-j];                return dp[n];    }}

以上是“LeetCode如何解决不同的二叉搜索树问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


标题名称:LeetCode如何解决不同的二叉搜索树问题
网页URL:http://hbruida.cn/article/pgepep.html