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

96. 不同的二叉搜索树

时间:2024-11-11 15:45:00浏览次数:3  
标签:int 不同 右子 二叉 搜索 数目 节点 dp 96

  1. 题目链接

  2. 解题思路

    • 暴力怎么做?n个节点,我们要先选头节点i,头节点选中之后,左子树的节点数就决定了,右子树的节点数也就决定了,所以选择头节点i后,不同的数目是左子树不同数目 * 右子树不同数目,这又是子问题了,又可以递归得到结果。

      • 有一个细节,假设n等于5,1,2,3,4,5,假设现在选择了3为头节点,右子树不同数目有多少个?其实右子树我并不用传入4,5这两个参数,我直接传入2,代表的是右子树有两个节点,一共有多少种不同的数目。
    • 递归只有一个参数,直接加缓存就可以了

  3. 代码

    class Solution {
    public:
        // 一共有n个节点,一共有多少种不同的搜索二叉树?
        int process(int n, vector<int> &dp) {
            if (n <= 1) {   //   只有一个节点,或者没有节点了  只有一种树
                return 1;
            }
            if (dp[n] != -1) {
                return dp[n];
            }
            int ans = 0;
            // 谁做头?
            for (int i = 1; i <= n; ++i) {
                ans += process(i - 1, dp) * process(n - i, dp);
            }
            dp[n] = ans;
            return ans;
        }
    
        int numTrees(int n) {
            vector<int> dp(n + 1, -1);
            return process(n, dp);
        }
    };
    

标签:int,不同,右子,二叉,搜索,数目,节点,dp,96
From: https://www.cnblogs.com/ouyangxx/p/18539840

相关文章

  • leetcode1008. 前序遍历构造二叉搜索树
    给定一个整数数组,它表示BST(即 二叉搜索树 )的 先序遍历 ,构造树并返回其根。保证 对于给定的测试用例,总是有可能找到具有给定需求的二叉搜索树。二叉搜索树 是一棵二叉树,其中每个节点, Node.left 的任何后代的值 严格小于 Node.val , Node.right 的任何后代的值......
  • 【9691】基于springboot+vue的地方美食分享网站
    作者主页:Java码库主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路 关注作者有好处文末获取免费源码项目描述困扰管理层的许多问题当中,地方美食分享管理一定是美食界不敢忽视的一块。......
  • 代码随想录——二叉树-12.平衡二叉树
    自顶向下递归(前序遍历)这种方法是一开始想到的,虽然ac了但是对于它的本质却不清不楚,不知道时间复杂度,不知道属于前序遍历。思路首先得到root节点的左右子树的深度(左右),若深度差绝对值大于1(中),则root为根的树不是平衡二叉树;否则继续递归root的左右子树,其左右子树都是平衡二叉树......
  • 代码随想录——二叉树-11.完全二叉树的节点个数
    思路一、层序遍历,时间复杂度O(n)二、利用完全二叉树性质,时间复杂度O(logn*logn)(小于O(n))完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置完全二叉树要么1.是满二叉树2.最后一层没满满二叉树计算节点数太方便了,直接用公式2^h-1。......
  • 数据结构 ——— 链式二叉树oj题:对称二叉树
    目录题目要求手搓一个对称二叉树代码实现 题目要求给你一个二叉树的根节点 root ,检查它是否轴对称手搓一个对称二叉树代码演示://数据类型typedefintBTDataType;//二叉树节点的结构typedefstructBinaryTreeNode{ BTDataTypedata;//每个节点的数据......
  • 实现链式结构二叉树
    目录需要实现的操作链式结构二叉树实现结点的创建前序遍历中序遍历后序遍历计算结点个数计算二叉树的叶子结点个数 计算二叉树第k层结点个数计算二叉树的深度查找值为x的结点 销毁层序遍历判断是否为完全二叉树 总结需要实现的操作//前序遍历voidPreOr......
  • 单词搜索
    单词搜索​给定一个mxn二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。​单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重......
  • 每日一题之二叉树
    已知结点元素值为正整数且值不相同的一棵二叉树。该二叉树通过给出其先序遍历序列和中序遍历序列构造而成。输入一个整数x,针对此二叉树编写程序求出x的右子树中所有结点值的和(若x不在树上,输出-1)。 输入说明:第一行输入某二叉树的先序遍历序列第二行输入该二叉树的中序遍历......
  • 【C语言】解决error C4996: 'fopen': This function or variable may be unsafe. Cons
    几天编译文件的时候报错,编译出错信息:错误1errorC4996:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.意思就是fopen不安全,推荐你用fopen_s,这个时......
  • Python实现SSA智能麻雀搜索算法优化BP神经网络回归模型(优化权重和阈值)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后关注获取。1.项目背景随着人工智能技术的发展,机器学习算法在各个领域的应用越来越广泛。其中,神经网络作为一类重要的机器学习方法,在模式识别、图像处理、自然语言处......