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

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

时间:2023-04-08 23:01:54浏览次数:66  
标签:right TreeNode val int nullptr 二叉 108 数组 left

题目链接:108. 将有序数组转换为二叉搜索树

方法:递归建树

解题思路

每次选取中间的元素作为根节点,递归创建左右子树,就可以保证左右子树的高度差绝对值不超过1

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        function<TreeNode*(int, int)> buildAVLTree = [&](int l, int r) -> TreeNode* {
            int mid = l + r >> 1;
            return l > r ? nullptr : new TreeNode(nums[mid], buildAVLTree(l, mid - 1), buildAVLTree(mid + 1, r));
        };
        return buildAVLTree(0, nums.size() - 1);
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(logn)\)。

标签:right,TreeNode,val,int,nullptr,二叉,108,数组,left
From: https://www.cnblogs.com/lxycoding/p/17299479.html

相关文章

  • 1590. 使数组和能被 P 整除
    题目链接:1590.使数组和能被P整除方法:前缀和+哈希解题思路(1)要求\((sum-sunSum)\)%\(p=0\),即要求\([sum-(s[j]-s[i])]\)%\(p=0\),即\(sum\)%\(p=(s[j]-s[i])\)%\(p\),即\(s[j]\)%\(p-sum\)%\(p=s[i]\)%\(p\);(2)上述中的\(sum\)可以提前确......
  • 二维数组
    在刷力扣题目是会遇到这种情况int**generate(intnumRows,int*returnSize,int**returnColumnSizes){}intnumRows:表示这传入的是一个数。int*returnSize:表示这传入的是一个数的地址。int**returnColumnSizes:表示这传入的是一个数组的地址。为什么要这么做呢?答:在......
  • 1144. 递减元素使数组呈锯齿状
    题目链接:1144.递减元素使数组呈锯齿状方法:找规律+模拟解题思路对于一个整数数组\(nums\),可以转换为题目中两种锯齿数组,对于两种情况的转换取最小值。并且由于操作只能将一个元素减1,因此:对于第1种情况,只用下标为奇数的元素需要减小到比两边最小值小1;对于第2种情况,只用下......
  • 数组扁平化
    vararr=[{id:1,title:'我是1目录',children:[{id:11,title:'我是1-1目录',children:[{id:111,title:&#......
  • 『0016』 - Solidity Types - 玩转 Solidity 数组 (Arrays)
    作者:黎跃春,学习目标掌握Arrays的可变不可变的创建深度理解可变数组和不可变数组之间的区别二维数组memoryarrays的创建bytes0~bytes32、bytes与byte[]对比固定长度的数组(Arrays)固定长度类型数组的声明pragmasolidity^0.4.4;contractC{//数组的长度为5,数组里面的存储......
  • 『0013』 - Solidity Types - 固定大小字节数组(Fixed-size byte arrays)
    作者:黎跃春,固定大小字节数组(Fixed-sizebytearrays)固定大小字节数组可以通过bytes1,bytes2,bytes3,…,bytes32来进行声明。PS:byte的别名就是byte1。bytes1只能存储一个字节,也就是二进制8位的内容。bytes2只能存储两个字节,也就是二进制16位的内容。bytes3只能存储三个字......
  • 『0014』 - Solidity Types - 动态大小字节数组(Dynamically-sized byte array)
    作者:黎跃春,一、Dynamically-sizedbytearraystring是一个动态尺寸的UTF-8编码字符串,它其实是一个特殊的可变字节数组,string是引用类型,而非值类型。bytes动态字节数组,引用类型。根据经验,在我们不确定字节数据大小的情况下,我们可以使用string或者bytes,而如果我们清楚的知道或者......
  • 【Java】数组
    数组是编程语言中常见的数据结构,用来存储一组相同数据类型的数据,可以通过整型索引访问数组中的每一个值。需要注意,同一个数组中存储的所有元素的数据类型必须相同。根据数组存放元素的组织结构,可将数组分为一维数组、二维数组以及多维(三维及以上)。创建数组:data_type[]varName;......
  • JavaScript 数组笔记
    添加和删除数组项添加push()push()方法:向数组的末尾添加一个或多个元素,并返回修改后的数组长度。语法:arr.push(element1[,...[,elementN]])参数:element1,...,elementN:要添加到数组末尾的元素。示例:constfruits=['apple','banana','orange'];constnewLength......
  • 二维数组的初始化
    ⑴分行进行初始化inta[2][3]={{1,2,3},{4,5,6}};在{}内部再用{}把各行分开,第一对{}中的初值1,2,3是0行的3个元素的初值。第二对{}中的初值4,5,6是1行的3个元素的初值。相当于执  行如下语句:inta[2][3];a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1......