“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习
一、题目描述
- 给你一个整数
n,求恰由n个节点组成且节点值从1到n互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
二、思路分析
- 这题一看就有点懵
- 所谓二叉搜索树:左子树小于根,根需要小于右子树
- 这道题我们可以画一下图,找一下递推关系
- 推导公式:
dp[n]=dp[0]*dp[n]+dp[i-1]*dp[n-i]
三、AC 代码:
class Solution {
public int numTrees(int n) {
//公式dp[n]=dp[0]*dp[n]+dp[i-1]*dp[n-i]
//创建数组+1是因为从零开始
int dp[]= new int[n+1];
dp[0] = 1;
dp[1] = 1;
//i代表ni = 2 因为已经定义了0位和1位的值
for(int i = 2; i<=n;++i){
//j代表i
for(int j = 1;j<=i;++j){
dp[i] += dp[j-1] * dp[i-j];
}
}
return dp[n];
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:-
当没有思路的情况下,一定要画图
-
根据图找出归路,也就是递推公式
-
根据递推公式进行解题
-