不同的二叉搜索树
难度:中等
题目描述
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例1
输入: n = 3
输出: 5
示例2
输入: n = 1
输出: 1
题解
依据动态规划解题,进行如下操作
- 因为当节点数为
0
的时候是一个空的树,所以返回值也为1
,所以边界值为 d p [ 0 ] = 1 dp[0]=1 dp[0]=1 - 当根节点确定时,设不同左子树的数量为 l e f t C o u n t leftCount leftCount,不同右子树数量为 r i g h t C o u n t rightCount rightCount,故不同的二叉搜索树数量为 l e f t C o u n t ∗ r i g h t C o u n t leftCount * rightCount leftCount∗rightCount
- 所以,进行循环,当循环结束即可得到最终结果
想法代码
using System.Runtime.Intrinsics.Arm;
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
{
this.val = val;
this.left = left;
this.right = right;
}
}
class Solution
{
public static void Main(String[] args)
{
int n = 3;
Solution solution = new Solution();
Console.WriteLine(solution.NumTrees(n));
}
public int NumTrees(int n)
{
int[] dp = new int[n + 1];
dp[0] = 1;
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];
}
}
}
return dp[n];
}
}