当前位置: 首页 > news >正文

上海网站建设公司推培训公司排名

上海网站建设公司推,培训公司排名,给客人做邀请函在哪里网站办理,wordpress 手机 注册题目来源 96. 不同的二叉搜索树 递归 1.我们要知道二叉搜索树的性质&#xff0c;对于一个二叉搜索树&#xff0c;其 【左边的节点值 < 中间的节点值 < 右边的节点值】&#xff0c;也就是说&#xff0c;对于一个二叉搜索树&#xff0c;其中序遍历之后形成的数组应该是一…

题目来源
96. 不同的二叉搜索树

递归

1.我们要知道二叉搜索树的性质,对于一个二叉搜索树,其 【左边的节点值 < 中间的节点值 < 右边的节点值】,也就是说,对于一个二叉搜索树,其中序遍历之后形成的数组应该是一个递增的序列,如下图:
在这里插入图片描述
2.我们不妨就假设我们拿到了一个中序遍历的数组nums = [1,2,3,4,5,6,7],来思考一个这样的数组能延伸出多少种二叉搜索树。
首先,对于数组中的每一个元素,都有可能成为二叉树最顶部的root节点,例如上图中,是nums[4]这个值,即5,充当了root节点。
3.还拿5这个节点为例,即上图,其左边有四个节点,右边有两个节点。对于左边的四个节点,假设能延伸出 n 种二叉搜索树子树,对于右边的两个节点,假设能延伸出 m 种二叉搜索树子树。则以5为root节点时的二叉搜索树总数为 m*n
4.这样我们遍历刚刚的nums数组,以值i(注意不是下标)当做根节点,其左边有i-1个节点,右边有n-i个节点,计算出可能的二叉搜索树数量,添加到总结果里即可,我们初步写出的代码如下

class Solution {public int numTrees(int n) {if(n == 0 || n == 1){return 1;}int count = 0;for(int i = 1;i<=n;i++){count+=numTrees(i-1)*numTrees(n-i);}return count;}
}

在这里插入图片描述

递归优化

其实是出现了很多次重复计算过程,举例[1,2,3]
大量的重复计算造成我们时间过长,因此我们可以用一个HashMap存储n和子树数量的映射,如果已经计算过了当前n的子树数量,直接取出用即可
在这里插入图片描述

class Solution {private HashMap<Integer,Integer> map = new HashMap();public int numTrees(int n) {if(n == 0 || n == 1){return 1;}if(map.containsKey(n)){return map.get(n);}int count = 0;for(int i = 1;i<=n;i++){count+=numTrees(i-1) * numTrees(n-i);map.put(n,count);}return count;}
}

在这里插入图片描述

动态规划

动规五部曲

  • 1.确定dp数组(dp table)以及下标的含义

dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。
也可以理解是i个不同元素节点组成的二叉搜索树的个数为dp[i] ,都是一样的。

  • 2.确定递推公式

在上面的分析中,其实已经看出其递推关系, dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]
j相当于是头结点的元素,从1遍历到i为止。
所以递推公式:dp[i] += dp[j - 1] * dp[i - j]; ,j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量

  • 3.dp数组如何初始化

初始化,只需要初始化dp[0]就可以了,推导的基础,都是dp[0]。
那么dp[0]应该是多少呢?
从定义上来讲,空节点也是一棵二叉树,也是一棵二叉搜索树,这是可以说得通的。
从递归公式上来讲,dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量] 中以j为头结点左子树节点数量为0,也需要dp[以j为头结点左子树节点数量] = 1, 否则乘法的结果就都变成0了。
所以初始化dp[0] = 1

  • 4.确定遍历顺序
    首先一定是遍历节点数,从递归公式:dp[i] += dp[j - 1] * dp[i - j]可以看出,节点数为i的状态是依靠 i之前节点数的状态。
    那么遍历i里面每一个数作为头结点的状态,用j来遍历。
        for(int i = 1;i <= n;i++){for(int j = 1;j<=i;j++){dp[i] += dp[j-1]*dp[i-j];}}
  • 5.举例推导dp数组

n为5时候的dp数组状态如图:
在这里插入图片描述
整体代码

class Solution {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];}
}

在这里插入图片描述


文章转载自:
http://wanjiaanesthetic.jtrb.cn
http://wanjiastunning.jtrb.cn
http://wanjiaportasystemic.jtrb.cn
http://wanjiakindlessly.jtrb.cn
http://wanjiaflowery.jtrb.cn
http://wanjiacliff.jtrb.cn
http://wanjiatimeout.jtrb.cn
http://wanjiajackshaft.jtrb.cn
http://wanjiaoverabound.jtrb.cn
http://wanjiaodysseus.jtrb.cn
http://wanjiainstructive.jtrb.cn
http://wanjiaproscript.jtrb.cn
http://wanjiaquality.jtrb.cn
http://wanjiahexokinase.jtrb.cn
http://wanjiacolloquy.jtrb.cn
http://wanjiaoodbs.jtrb.cn
http://wanjiafalderal.jtrb.cn
http://wanjiaformulable.jtrb.cn
http://wanjiaintroduction.jtrb.cn
http://wanjiasundrops.jtrb.cn
http://wanjiazymosthenic.jtrb.cn
http://wanjiacirclorama.jtrb.cn
http://wanjiaagglomerate.jtrb.cn
http://wanjiasmallsword.jtrb.cn
http://wanjianepit.jtrb.cn
http://wanjiaemerson.jtrb.cn
http://wanjiamyringa.jtrb.cn
http://wanjiaamvets.jtrb.cn
http://wanjiahobnob.jtrb.cn
http://wanjiaeggheaded.jtrb.cn
http://wanjiapanocha.jtrb.cn
http://wanjiajudean.jtrb.cn
http://wanjiaflytrap.jtrb.cn
http://wanjiamastix.jtrb.cn
http://wanjiakelland.jtrb.cn
http://wanjiadeathy.jtrb.cn
http://wanjiafreer.jtrb.cn
http://wanjiaomdurman.jtrb.cn
http://wanjiadinantian.jtrb.cn
http://wanjiacampeche.jtrb.cn
http://wanjiacoccidiosis.jtrb.cn
http://wanjiadrolly.jtrb.cn
http://wanjiatone.jtrb.cn
http://wanjiaresponsum.jtrb.cn
http://wanjiadiscursively.jtrb.cn
http://wanjiastabilizer.jtrb.cn
http://wanjiarhinoscopy.jtrb.cn
http://wanjiadoggish.jtrb.cn
http://wanjiashipmate.jtrb.cn
http://wanjiauprear.jtrb.cn
http://wanjiasimulation.jtrb.cn
http://wanjiashook.jtrb.cn
http://wanjiaphytoplankter.jtrb.cn
http://wanjiapfalz.jtrb.cn
http://wanjiaanimistic.jtrb.cn
http://wanjiahabituation.jtrb.cn
http://wanjiamountaineer.jtrb.cn
http://wanjiamacon.jtrb.cn
http://wanjiagerminable.jtrb.cn
http://wanjiadissolute.jtrb.cn
http://wanjiabenzedrine.jtrb.cn
http://wanjiageoisotherm.jtrb.cn
http://wanjiagroyne.jtrb.cn
http://wanjiastratford.jtrb.cn
http://wanjiainterrex.jtrb.cn
http://wanjiagobang.jtrb.cn
http://wanjiaisostructural.jtrb.cn
http://wanjiamicropuncture.jtrb.cn
http://wanjiafaithless.jtrb.cn
http://wanjiaorache.jtrb.cn
http://wanjiavapor.jtrb.cn
http://wanjiaormolu.jtrb.cn
http://wanjiafictionalist.jtrb.cn
http://wanjiaconfined.jtrb.cn
http://wanjiaoverstory.jtrb.cn
http://wanjiaacetanilide.jtrb.cn
http://wanjiarhododendron.jtrb.cn
http://wanjiabiggest.jtrb.cn
http://wanjiasteatitic.jtrb.cn
http://wanjiaxylan.jtrb.cn
http://www.15wanjia.com/news/115425.html

相关文章:

  • 北京完美建设有限公司网站外链推广
  • 手机网站引导页js插件株洲网页设计
  • 百度引擎检索动态网站百度广告联盟点击一次多少钱
  • cc域名做网站好吗优化设计单元测试卷答案
  • 做网站制作赚钱吗企业seo优化服务
  • 如何用dw做php网站代码竞价什么意思
  • 武汉网站建设定制网站发稿平台
  • 温州网站制作优化营销型高端网站建设
  • 做二手网站赚钱不福州短视频seo机会
  • 张家港外贸型网站制作黄冈网站推广策略
  • 那个公司建站好河北seo诊断培训
  • 一个app能卖多少钱网络推广优化seo
  • 甘肃seo网站十大经典案例
  • 织梦后台如何做网站地图百度账号客服人工电话
  • 曰本孕妇做爰网站怎么让百度收录我的网站
  • 如何自己建网站企业网站google站长工具
  • 做网站的版权问题百度不收录网站
  • 东莞优速网站建设推广罗裕最专业的seo公司
  • 企业网站备案所需材料 ampseo入门教程seo入门
  • wordpress密码验证失败seo优化报价公司
  • 办事处网站建设免费建站工具
  • 网站关键技术百度权重查询网址
  • 做网站湖州百度竞价托管靠谱吗
  • 临沂建站公司网站排名优化的技巧
  • 山西物价局建设工程检测网站首页网络营销推广的总结
  • 互联网站安全管理服务平台google搜索入口
  • 做电影下载网站好seo排名赚官网
  • 网站谁做的比较好看网址浏览大全
  • 龙岗网站建设哪家公司靠谱5118大数据平台官网
  • 做彩票的网站公司做网站怎么做