不同的二叉搜索树
题目
不同的二叉搜索树
给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树,有多少种?返回满足题意的二叉搜索树的种数。
示例
![]() |
|---|
解题思路
1.组成的二叉树必须满足条件为二叉搜索树(通过中序遍历,其结果依次从小到大顺序排列)
2.根据该规律二叉树的左子树值小于根节点,二叉树的右子树大于根节点。
4.每个左子树或右子树又是依次需要构建二叉搜索树。
5.由此我们可以通过根节点左右子树的个数判断左右子树排列方式数量,左右子树相组合就可以得到以次为根节点的排列顺序。
|
|
|
|
6.其左子树有2种方式,右子树具有2种,故一共2*2=4种
代码
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n+1);
if(n <= 1)return 1;
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for(int i = 2; i <= n; i++){
int temp = 0;
for(int k = 1; k <= i; k++){
temp = temp + dp[k-1]*dp[i-k];
}
dp[i] = temp;
}
return dp[n];
}
};


浙公网安备 33010602011771号