首页 > 其他分享 >96. 不同的二叉搜索树(中)

96. 不同的二叉搜索树(中)

时间:2023-11-29 16:11:53浏览次数:35  
标签:int 二叉 搜索 动态 节点 dp 96

目录

题目

动态规划

  • 由于 1,2...n 这个数列是递增的,所以我们从任意一个位置“提起”这课树,都满足二叉搜索树的这个条件:左边儿子数小于爸爸数,右边儿子数大于爸爸数。例如,我要用 [1,2,3,4,5,6] 构建。首先,提起 "2" 作为树根,[1]为左子树,[3,4,5,6] 为右子树,现在就变成了一个更小的问题:如何用 [3,4,5,6] 构建搜索树?满足动态规划的重叠子问题的条件。
class Solution:
    def numTrees(self, n: int) -> int:
        dp = [0] * (n + 1)  # 创建动态规划数组,dp[i]表示i个节点能够构成的二叉搜索树的数量
        dp[0] = 1  # 空树也算一种情况,所以初始化dp[0]为1
        dp[1] = 1  # 只有一个节点的情况下,只有一种构成二叉搜索树的方式
        
        for i in range(2, n + 1):  # 从2开始计算,直到n
            for j in range(i):  # 遍历j,j表示左子树的节点数量
                dp[i] += dp[j] * dp[i - j - 1]  #组合左右子树不同的可能性
        return dp[n]  # 返回dp数组的最后一个元素,即n个节点能够构成的二叉搜索树的数量

标签:int,二叉,搜索,动态,节点,dp,96
From: https://www.cnblogs.com/lushuang55/p/17865080.html

相关文章

  • Java开发者的Python快速实战指南:探索向量数据库之文本搜索
    前言如果说Python是跟随我的步伐学习的话,我觉得我在日常开发方面已经没有太大的问题了。然而,由于我没有Python开发经验,我思考着应该写些什么内容。我回想起学习Java时的学习路线,直接操作数据库是其中一项重要内容,无论使用哪种编程语言,与数据库的交互都是不可避免的。然而,直接操作......
  • ElasticSearch搜索结果处理
    一、排序elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。1.1.语法说明:对结果的排序语法如下:GET/indexname/_search{"query":{"match_all":{}},"sort":[{"......
  • 13_翻转二叉树
    翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]【思路】基本思想就是想要翻转二叉树,只需要把每一个节点的左右孩子交......
  • 如何正确的在AIX 7上正确开启大页内存(large page)on oracle 11.2.0.4 rac 转发 https:
    1、关于大页有个客户的业务系统上要开启大页,提高系统性能,研究了一下,网上文章太多,自己做了一些测试,经过实机测试,整理了一下操作记录。关于AIX上为什么要开启大页,借用MOS里的说明原文:StartingwiththeAIXV5.1operatingsystemwhenrunningonIBMPOWER4orPOWER5proces......
  • [洛谷P5966] [BZOJ4344] [POI2016] Hydrorozgrywka
    题解建出原图的圆方树。由于原图无重边,不妨把桥看作二元环建树,这样圆点只与方点直接相连。圆方树定某一圆点为根后,若点\(u\)是圆点,定义点\(u\)的子仙人掌为点\(u\)子树中的圆点在原图的导出子图,定义该子仙人掌的根为点\(u\);若点\(u\)是方点,定义点\(u\)的子仙人掌为点......
  • 面试必刷TOP101:34、判断是不是二叉搜索树
    题目题解publicclassSolution{privateTreeNodepre=null;/***给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树***@paramrootTreeNode类*@returnbool布尔型*/publicbooleanisValidBST(TreeNoderoot){......
  • Python实现完全二叉树
    给定一个元素序列(如列表),递归的创建一颗完全二叉树完整代码如下#!/usr/bin/envpython3classTreeNode:"""Nodeofcompletetree"""def__init__(self,data=0):self.data=dataself.left=Noneself.right=Nonedefb......
  • 12_二叉树的最小深度
    二叉树的最小深度给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例1:输入:root=[3,9,20,null,null,15,7]输出:2示例2:输入:root=[2,null,3,null,4,null,5,null,6]输出:5【思路】当遍......
  • 面试必刷TOP101:33、二叉树的镜像
    题目题解publicTreeNodeMirror(TreeNodepRoot){if(pRoot==null){returnnull;}TreeNoderoot=newTreeNode(pRoot.val);root.left=Mirror(pRoot.right);root.right=Mirror(pRoot.left);retur......
  • 7-1896C - Matching Arrays
    题意:两个数组\(a和b\),对\(b\)任意排序,使得\(a[i]>b[i]的个数为x\),要求输出能满足的数列。思路:一个任意排序,相当于两个任意排序,都升序,发现规律,\(让排序后的b数组,循环右移x位置\),满足条件则输出,否则一定不满足。代码:点击查看代码#include<bits/stdc++.h>#defineintlong......