LeetCode 95题不同的二叉搜索树||(C语言实现)

这篇博客介绍了如何使用C语言解决LeetCode第95题,即生成所有由1到n节点组成的二叉搜索树。文章通过分析问题的最优子结构和边界条件,给出了递归的解决方案,并提供了具体的C语言代码实现。
摘要由CSDN通过智能技术生成

LeetCode 95题不同的二叉搜索树||(C语言实现)

题目链接: https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。

示例:

输入: 3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:

1
2
3
4
5
1         3     3     2    1
 \       /     /       / \    \
  3     2     1       1   3    2
 /     /       \                \
2     1         2                3

这道题属于一个树的动态规划问题,首先我们可以找到其最优子结构就是从1到n的每个点为顶点其余点为子树(比定点小放在左子树,比顶点大放在右子树)的所有二叉树的集合。其边界就是当根节点的子树为空时的情况,如果想外扩展一下,当根节点的子树为1时,可以直接确定该根节点的左右子树为空,这样可以减少一些循环。因为根节点不同则树不同,所以这一规划问题无重复字。

找到了最优子结构与边界,下一步就是寻找其关系方程式,不难相出以下关系方程:

当start < end时,返回空(二级指针指向的一级指针指向NULL)
其他情况可分为等或不等(来减少一些循环数):
当start == end 时,返回一颗值为start的数;
当start > end 时,递归调用此函数构造以从start到end为顶点的树。

那么这道题就解决了。。。
具体代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

struct TreeNode** create(int start,int end,int*m)
// 返回所有从start开始到end结束这些数所能构成的二叉搜索树,并通过间接赋值输出这些二叉树的数目
{
   
    struct TreeNode **p,**lefts,**rights;
    int a,i,b,j,k,count = 0;       //定义的变量
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值