【代码随想录】刷题记录(104)-不同的二叉搜索树
题目描述:
给你一个整数 n
,求恰由 n
个节点组成且节点值从 1
到 n
互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。
示例 1:
输入:n = 3 输出:5
示例 2:
输入:n = 1 输出:1
提示:
1 <= n <= 19
我的作答:
思路是dp数组的每个元素i表示,i个不同元素组成的二叉搜索树数量;以dp[3]为例:
有dp[0]*dp[3],dp[1]*dp[2],dp[2]*dp[1],dp[3]*dp[0]四种情况,*左边为左子树,右边为右子树;因此可以得到递归公式dp[i] += dp[j-1]*dp[i-j]两层for循环,至于为什么是j-1,因为j-1+i-j=i-1,而dp[i]=dp[i]+dp[i-1],完成递归
初始化,因为一切都从dp[0]开始,所以dp[0]不能为0,设置为1,空结点也可以是树;
class Solution(object):
def numTrees(self, n):
"""
:type n: int
:rtype: int
"""
if n==0: return 1
dp = [0]*(n+1)
dp[0] = 1 #初始化
for i in range(1, n+1): #从1到n
for j in range(1, i+1): #从1到i
dp[i] += dp[j-1]*dp[i-j]
return dp[n]
参考:
差不多
原文地址:https://blog.csdn.net/Aerochacha/article/details/145183680
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!