怎么注册网站账号,信息网站方案,wordpress文章内链指定关键词,网页制作重庆给你一个整数 n #xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种#xff1f;返回满足题意的二叉搜索树的种数。
示例 1#xff1a; 输入#xff1a;n 3
输出#xff1a;5示例 2#xff1a;
输入#xff1a;n 1
输出#xff1a;1提…给你一个整数 n 求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种返回满足题意的二叉搜索树的种数。
示例 1 输入n 3
输出5示例 2
输入n 1
输出1提示
1 n 19
class Solution {
public:int numTrees(int n) {//dp[i]:由i个节点组成的二叉搜索树有dp[i]种//推导n3;//节点为 1,2,3。 二叉搜索树左子树小于根节点根节点小于右子树。三种情况//1、头节点为1有两种情况 1。dp[1] 左边0节点数种类 * 右边2节点 树种类//2、头节点为2只有一种情况 dp[2] 左边1节点种类 * 右边1节点种类//3、头节点为3有两种dp[3] 左边2节点 * 右边0节点//所以dp[i] dp[j-1] * dp[i-j]; 左边节点个数 * 右边节点个数。左边一种情况对应右边 n 个节点种类//初始化dp[0] 1;空二叉搜索树也算一个int dp[20] {0}; //因为需要需要 n个情况累加所以得赋值dp[0] 1;//需要枚举 以每一个小于 n的节点作为头节点的情况//要求n4需要得出右边为3个节点时的种类即dp[3];
//当3为头结点的时候其左子树有两个节点看这两个节点的布局是不是和n为2的时候两棵树的布局也是一样的啊
//当2为头结点的时候其左右子树都只有一个节点布局是不是和n为1的时候只有一棵树的布局也是一样的啊
//发现到这里其实我们就找到了重叠子问题了其实也就是发现可以通过dp[1] 和 dp[2] 来推导出来dp[3]的某种方式。for(int i 1;i n;i){for(int j 1;j i;j){dp[i] dp[j-1] * dp[i-j];}}return dp[n];}
};