再生产中 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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 主机可以ping通路由器但是连不上网怎么办
  • ¥15 数据库一张以时间排好序的表中,找出多次相邻的那些行
  • ¥50 关于DynamoRIO处理多线程程序时候的问题
  • ¥15 kubeadm部署k8s出错
  • ¥15 Abaqus打不开cae文件怎么办?
  • ¥20 双系统开机引导中windows系统消失问题?
  • ¥15 小程序准备上线,软件开发公司需要提供哪些资料给甲方
  • ¥15 关于生产日期批次退货退款,库存回退的问题
  • ¥15 手机应用的时间可以修改吗
  • ¥15 docker 运行OPEN-webui异常