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

解题思路:

平衡二叉树,又称自平衡二叉搜索树(简称AVL树),其特点如下:

  • 每个子树都为平衡二叉树
  • 高度平衡:任意节左子树与右子树高度差不超过1
  • 排序树:左子树的所有节点的值小于该节点,右子树所有节点的值大于该节点。
  • 效率高:查找、插入、删除操作时间复杂度为O(logN)

由平衡可知左右子树的节点数量近似相等,相差不应超过一。建树的时候,从数组的最中间选择作为根节点,有序数组的左边组成左子树,数据右边组成右子树,直至完成几个。

cpp 复制代码
	TreeNode* sortedArrayToBST(vector<int>& nums) {
        return bulidTree(nums, 0, nums.size()-1);
    }
    
    TreeNode* bulidTree(vector<int>& nums, int a, int b)
    {
        if(a < 0 || b > nums.size()-1 || a > b) return nullptr;
        int mid = (a + b) / 2;
        TreeNode* root = new TreeNode(nums[mid]);
        if(mid - a > 0)
        {
            root->left = bulidTree(nums, a, mid-1);
        }
        if(b - mid > 0)
        {
            root->right = bulidTree(nums, mid+1, b);
        }

        retur
相关推荐
尘诞辰7 小时前
【C语言】数据在内存中的储存
c语言·开发语言·数据结构·c++
无敌最俊朗@7 小时前
STL-关联容器(面试复习4)
开发语言·c++
无限进步_7 小时前
【C语言】栈(Stack)数据结构的实现与应用
c语言·开发语言·数据结构·c++·后端·visual studio
闻缺陷则喜何志丹7 小时前
【计算几何 SAT轴】P6732 「Wdsr-2」方分|普及+
c++·数学·计算几何·sat轴·凸多边形分离
embrace997 小时前
【C语言学习】预处理详解
java·c语言·开发语言·数据结构·c++·学习·算法
拼好饭和她皆失7 小时前
《二分答案算法精讲:从原理到实战(上篇)》
c++·算法
Tisfy7 小时前
LeetCode 3652.按策略买卖股票的最佳时机:滑动窗口
算法·leetcode·题解·滑动窗口
helloworddm7 小时前
C++与C#交互 回调封装为await
c++·c#·交互
应用市场7 小时前
TCP网络连接断开检测机制详解——C++实现网络连通性判断与断线类型识别
网络·c++·tcp/ip
菜鸟233号7 小时前
力扣216 组合总和III java实现
java·数据结构·算法·leetcode