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
相关推荐
小贾要学习4 分钟前
【数据结构】C++实现红黑树
数据结构·c++
ajassi200027 分钟前
开源 C++ QT QML 开发(十七)进程--LocalSocket
c++·qt·开源
微露清风1 小时前
系统性学习C++-第五讲-内存管理
java·c++·学习
235161 小时前
【LeetCode】146. LRU 缓存
java·后端·算法·leetcode·链表·缓存·职场和发展
星夜钢琴手2 小时前
推荐的 Visual Studio 2026 Insider C++ 程序项目属性配置
c++·visual studio
kyle~3 小时前
Qt---setAttribute设置控件或窗口的内部属性
服务器·前端·c++·qt
hsjkdhs3 小时前
C++之多态
开发语言·jvm·c++
kyle~4 小时前
C++STL---静态数组array
开发语言·c++
kk”4 小时前
C++ List
开发语言·c++
tkevinjd4 小时前
反转链表及其应用(力扣2130)
数据结构·leetcode·链表