leetcode做题笔记95. 不同的二叉搜索树 II

这篇具有很好参考价值的文章主要介绍了leetcode做题笔记95. 不同的二叉搜索树 II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

思路一:递归

struct TreeNode ** partition(int start, int end, int* returnSize){
    *returnSize = 0;
    int size = 32;
    struct TreeNode** ans = malloc(sizeof(struct TreeNode*) * size);
    if (start >= end) {
        ans[0] = NULL;
        *returnSize = 1;
        return ans;
    }
    for (int i = start; i < end; i++) {
        int lsize, rsize;
        struct TreeNode** lnode = partition(start, i, &lsize);
        struct TreeNode** rnode = partition(i + 1, end, &rsize);
        for (int m = 0; m < lsize; m++) {
            for (int n = 0; n < rsize; n++) {
                if (*returnSize >= size) {
                    size <<= 1;
                    ans = realloc(ans, sizeof(struct TreeNode*) * size);
                }
                int index = (*returnSize)++;
                ans[index] = malloc(sizeof(struct TreeNode));
                ans[index]->left = lnode[m];
                ans[index]->right = rnode[n];
                ans[index]->val = i + 1;
            }
        }
        free(lnode);
        free(rnode);
    }
    return ans;
}

struct TreeNode** generateTrees(int n, int* returnSize){
    struct TreeNode** ans = partition(0, n, returnSize);
    return ans;
}

分析:

本题要列出所有二叉搜索树,即可转换为列举左子树所有集合和右子树所有集合两个问题,分别用递归函数将左右子树根节点存入最后输出即可解决

总结:

本题考察二叉搜索树的枚举问题,利用递归分别列举左右子树可解决文章来源地址https://www.toymoban.com/news/detail-667436.html

到了这里,关于leetcode做题笔记95. 不同的二叉搜索树 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode做题笔记98. 验证二叉搜索树

    给你一个二叉树的根节点  root  ,判断其是否是一个有效的二叉搜索树。 有效  二叉搜索树定义如下: 节点的左子树只包含  小于  当前节点的数。 节点的右子树只包含  大于  当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 本题要判断二叉树是否为二叉

    2024年02月11日
    浏览(37)
  • LeetCode热题HOT100:76. 最小覆盖子串,84.柱状图中最大的矩形、96. 不同的二叉搜索树

    题目 :给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保

    2023年04月19日
    浏览(69)
  • 【LeetCode题目详解】第九章 动态规划part03 343. 整数拆分 96.不同的二叉搜索树 (day41补)

    给定一个正整数  n  ,将其拆分为 k 个 正整数 的和(  k = 2  ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积  。 示例 1: 示例 2: 提示: 2 = n = 58 看到这道题目,都会想拆成两个呢,还是三个呢,还是四个.... 我们来看一下如何使用动规来解决。 # 动态规划 动

    2024年02月10日
    浏览(46)
  • 96. 不同的二叉搜索树

    目录 1、题目描述 2、思路:动态规划 2.2、确定递推公式 2.3、dp数组初始化 2.4、确定遍历顺序 3、C++实现如下 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 示例

    2024年02月02日
    浏览(69)
  • 【力扣】96. 不同的二叉搜索树 <动态规划>

    给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3 输出:5 示例 2: 输入:n = 1 输出:1 提示: 1 = n = 19 确定 dp 数组以及下标的含义 dp[i] : 1到 i 为节点组成的二叉搜索树的个

    2024年02月10日
    浏览(37)
  • 力扣第96题 不同的二叉搜索树 c++ 二叉搜索树 动态规划 + 数学思维

    96. 不同的二叉搜索树 中等 相关标签 树   二叉搜索树   数学   动态规划   二叉树 给你一个整数  n  ,求恰由  n  个节点组成且节点值从  1  到  n  互不相同的  二叉搜索树  有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 示例 2: 提示: 1 = n = 19 vectorint

    2024年02月06日
    浏览(35)
  • 算法训练第四十一天|343. 整数拆分 、96.不同的二叉搜索树

    题目链接:343. 整数拆分 参考:https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 题目描述 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入:

    2023年04月24日
    浏览(44)
  • 【动态规划 NK刷题记 DP5 之 有多少个不同的二叉搜索树

    目录  一、题解部分 1.1题目 1.2铺垫 1.3.题解: 二、法一:递归实现 1.输入数据,创建动态数组  2.断言dp指针,并给它赋值 3.打印结果并调用函数 3.1注意: 4.实现函数binarytree 4.1先将动态数组dp[i]中特殊的值给出来,比如i=1,i=0时 4.2然后循环遍历节点的数量为i时,根节点j的

    2024年02月07日
    浏览(62)
  • 【二十】【动态规划】879. 盈利计划、377. 组合总和 Ⅳ、96. 不同的二叉搜索树 ,三道题目深度解析

    动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重

    2024年01月16日
    浏览(39)
  • leetcode做题笔记115. 不同的子序列

    给你两个字符串  s   和  t  ,统计并返回在  s  的  子序列  中  t  出现的个数。 题目数据保证答案符合 32 位带符号整数范围。 本题要计算t在s子序列的个数,可想到使用动态规划的方法,根据两个字符串的顺序不断向后匹配,当匹配的相同位置字符不相同时调用前面匹

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包