首页 > 其他分享 >108. 将有序数组转换为二叉搜索树c

108. 将有序数组转换为二叉搜索树c

时间:2024-03-07 15:27:06浏览次数:29  
标签:TreeNode struct temp nums int mid 二叉 108 数组

如果按一般思路建一个平衡二叉树,非常麻烦。

但是二分查找树就一个平衡二叉树,所有构建二叉查找树就行。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
struct  TreeNode* bulid(int* nums,int head,int tail){
    if(head>tail) return NULL;
    int mid=(head+tail)/2;
    struct TreeNode* temp=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    temp->val=nums[mid];
    temp->left=bulid(nums,head,mid-1);
    temp->right=bulid(nums,mid+1,tail);
    return temp;
}

struct TreeNode* sortedArrayToBST(int* nums, int numsSize) {
    if(numsSize<1) return NULL;
    int head=0,tail=numsSize-1;
    return bulid(nums,head,tail);
}

结果:

标签:TreeNode,struct,temp,nums,int,mid,二叉,108,数组
From: https://www.cnblogs.com/llllmz/p/18058963

相关文章

  • 669. 修剪二叉搜索树c
    这题还是很难得。一看是想着当作普通二叉树所有节点都递归,但是很难做,难度很高。/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*preorde(structT......
  • 450. 删除二叉搜索树中的节点c
    这题特别好,和递归删除链表里的元素有异曲同工之妙/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*leftleave(structTreeNode*root){root=r......
  • 代码随想录算法训练营第二天| 977.有序数组的平方、 209.长度最小的子数组、 59.螺旋
    977.有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/description/publicstaticint[]sortedSquares(int[]nums){intleft=0;intright=nums.length-1;int[]result=newint[nums.length];intwrite=......
  • labuladong_一/二维数组前缀和
    一维数组前缀和核心思路是我们new一个新的数组 preSum 出来,preSum[i] 记录 nums[0..i-1] 的累加和。看这个 preSum 数组,如果我想求索引区间 [1,4] 内的所有元素之和,就可以通过 preSum[5]-preSum[1] 得出。一维数组前缀和 ......
  • 二叉树中的最大路径和
    124.二叉树中的最大路径和二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root......
  • 数组
    数组中的数据叫元素      注意:计算机中是从0开始计数但日常中人们习惯从1开始计数,当数据需要普通人看的时候应当遵从日程的习惯从1开始计数 数组的遍历求和  看需要定义的数组能不能直接写出来,能就静态不能就动态   根据图来回忆流......
  • 701. 二叉搜索树中的插入操作c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*insertIntoBST(structTreeNode*root,intval){if(!root){structTreeNode*......
  • 235. 二叉搜索树的最近公共祖先c
     /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*preorder(structTreeNode*root,structTreeNode*p,structTreeNode*q){if(!root)r......
  • 236. 二叉树的最近公共祖先c
    思想就是层次遍历,然后判断每个节点是否为父节点、/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/booljudge(structTreeNode*root,structTreeNode*q){if(......
  • 33. 搜索旋转排序数组(中)
    目录题目二分搜索题目整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1......