leetcode:96.不同的二叉搜索树

解题思路:

输入n=3

n = 0 1个

n = 1 1个

n = 2 2个

头1+头2+头3

头1 = 左子树0节点(个数)x右子树2个节点(个数)

头2 = 左子树1节点(个数)x右子树1个节点(个数)

头3 = 左子树2节点(个数)x右子树0个节点(个数)

dp含义:

dp[3] = dp[0] *dp[2] + dp[1] *dp[1] + dp[2] * dp[0]

递推公式:

dp[i] += dp[j-1] * dp[i-j]

j相当于是头节点的元素,j-1相当于以j为头节点左子树节点数量,i-j以j为头节点右子树节点数量

将i遍历到j,进行累加

初始化:

dp[0] = 1

dp[1] = 1(可以从递推公式推出来,可以不初始化0)

遍历顺序:

从左往右,根据递推公式可知

代码实现:(最后如果结果有问题,记得打印dp数组)

相关推荐
xin_nai9 小时前
判断质数(Java版)
算法
W23035765739 小时前
经典算法详解:最大子数组和(暴力 / 分治 / 动态规划 / 线段树)
算法·动态规划·最大字段和
呼啦啦5619 小时前
leetcode练习——栈和队列
算法·leetcode·职场和发展
yugi9878389 小时前
基于最大信息熵的粒子群优化算法图像分割(MATLAB实现)
开发语言·算法·matlab
计算机安禾10 小时前
【数据结构与算法】第40篇:图论(四):最短路径——Dijkstra算法与Floyd算法
c语言·数据结构·算法·排序算法·哈希算法·图论·visual studio
SccTsAxR10 小时前
算法进阶:贪心策略证明全攻略与二进制倍增思想深度解析
c++·经验分享·笔记·算法
2301_7926748610 小时前
java学习day27(算法)
java·学习·算法
啦啦啦!10 小时前
c++AI大模型接入SDK项目
开发语言·数据结构·c++·人工智能·算法
lcj251110 小时前
【C语言】自定义类型1:结构体
c语言·开发语言·算法
jaysee-sjc10 小时前
十七、Java 高级技术入门全解:JUnit、反射、注解、动态代理
java·开发语言·算法·junit·intellij-idea