再生产中 2023-02-07 18:22 采纳率: 77.8%
浏览 25
已结题

将所有序数组转换为二叉搜索树

遇到的问题:
力扣108.将所有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

提交后显示解答错误,
我的思路是递归以先序遍历的方式从根节点依次创建其左右节点,最后返回根节点指针。目前不知道错因

我的代码:

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

struct TreeNode* lr(int *nums, int l, int r, struct TreeNode* rt)
{
    if(l>r)
        return NULL;
    rt=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    rt->left=rt->right=NULL;
    int mid=l + (r-l)/2;
    rt->val=nums[mid];
    lr(nums,l,mid-1,rt->left);
    lr(nums,mid+1,r,rt->right);
    return rt;
}

struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
    struct TreeNode *root;
    root=lr(nums,0,numsSize-1,root);
    return root;
}

执行结果:

img

  • 写回答

3条回答 默认 最新

  • 再生产中 2023-02-09 13:18
    关注

    这题涉及到的主要问题就是传参,应当使用二级指针作为实参传递,通过的代码如下:

    
    
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     struct TreeNode *left;
     *     struct TreeNode *right;
     * };
     */
     
    struct TreeNode* lr(int *nums, int l, int r, struct TreeNode** rt)
    {
        if(l>r)
            return NULL;
        struct TreeNode* rtt=(struct TreeNode*)malloc(sizeof(struct TreeNode));
        rtt->left=rtt->right=NULL;
        int mid=l + (r-l)/2;
        rtt->val=nums[mid];
        *rt=rtt;
        lr(nums,l,mid-1,&(rtt->left));
        lr(nums,mid+1,r,&(rtt->right));
        return rtt;
    }
     
    struct TreeNode* sortedArrayToBST(int* nums, int numsSize){
        struct TreeNode *root;
        root=lr(nums,0,numsSize-1,&root);
        return root;
    }
    
    

    关于传参问题毕竟清晰易懂的解释可以参考这个https://blog.csdn.net/Kukeoo/article/details/114297192?spm=1001.2014.3001.5506

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • BitGPT 2023-02-07 18:42
    关注

    该回答引用ChatGPT
    请参考下面的代码

    #include<iostream>
    #include<cmath>
    #include<vector>
    
    using namespace std;
    
    bool is_prime(int n) {
      if (n <= 1) return false;
      int m = sqrt(n);
      for (int i = 2; i <= m; i++) {
        if (n % i == 0) return false;
      }
      return true;
    }
    
    int main() {
      int num_primes = 0, min_gap = 0x7fffffff, max_gap = 0, gap;
      int prime1, prime2;
      vector<int> primes;
    
      for (int i = 100000; num_primes < 10000; i++) {
        if (is_prime(i)) {
          num_primes++;
          primes.push_back(i);
          if (num_primes >= 2) {
            gap = primes[num_primes - 1] - primes[num_primes - 2];
            if (gap < min_gap) {
              min_gap = gap;
              prime1 = primes[num_primes - 2];
              prime2 = primes[num_primes - 1];
            }
            if (gap > max_gap) {
              max_gap = gap;
            }
          }
        }
      }
    
      cout << "The minimum gap is " << min_gap << " between " << prime1 << " and " << prime2 << endl;
      cout << "The maximum gap is " << max_gap << endl;
    
      return 0;
    }
    
    
    
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-07 20:11
    关注
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 修改了问题 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥20 powerbulider 导入excel文件,显示不完整
  • ¥20 #关于multisim绘图遇到的问题
  • ¥15 用keil调试程序保证结果进行led相关闪烁
  • ¥15 paddle训练自己的数据loss降不下去
  • ¥20 用matlab的pdetool解决以下三个问题
  • ¥15 单个福来轮的平衡与侧向滑动是如何做到的?
  • ¥15 嵌入式Linux固件,能直接告诉我crc32校验的区域在哪不,内核的校验我已经找到了,uboot没有
  • ¥20 h3c静态路要求有详细过程
  • ¥15 调制识别中输入为时频图,星座图,眼图等
  • ¥15 数据结构C++的循环、随机数问题