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
相关推荐
墨染点香8 小时前
LeetCode 刷题【172. 阶乘后的零】
算法·leetcode·职场和发展
做怪小疯子8 小时前
LeetCode 热题 100——链表——反转链表
算法·leetcode·链表
郝学胜-神的一滴8 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
晚风(●•σ )9 小时前
C++语言程序设计——11 C语言风格输入/输出函数
c语言·开发语言·c++
恒者走天下10 小时前
秋招落定,拿到满意的offer,怎么提高自己实际的开发能力,更好的融入团队
c++
做怪小疯子10 小时前
LeetCode 热题 100——矩阵——旋转图像
算法·leetcode·矩阵
天若有情67310 小时前
【c++】手撸C++ Promise:从零实现通用异步回调组件,支持链式调用+异常安全
开发语言·前端·javascript·c++·promise
学困昇11 小时前
C++中的异常
android·java·c++
sin_hielo11 小时前
leetcode 2435
数据结构·算法·leetcode
合作小小程序员小小店11 小时前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全