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
相关推荐
QiLinkOS4 分钟前
合肥气链科技有限公司本质总结
c++·科技·算法·gitee·开源
Yuk丶6 分钟前
厌倦了假AI对话?本地 LLM 语音对话 + 口型同步系统 2.0(已开源!)
c++·人工智能·语言模型·开源·ue4·语音识别·游戏开发
kyle~15 分钟前
ROS2---零拷贝
linux·c++·机器人·ros2
Ricky_Theseus18 分钟前
栈 & 队列 应用场景
数据结构·c++
ysu_031419 分钟前
leetcode数据结构与算法5~7:链表双指针与二级指针
数据结构·学习·算法·leetcode·链表
薇茗19 分钟前
【C++】类与对象 核心篇
开发语言·c++
ouliten20 分钟前
C++笔记:偏现代C++日志系统
c++·笔记
猪脚饭还是好吃的21 分钟前
【分享】C4droid 安卓C++编译器 手机编程超便捷
android·c++·智能手机
草莓熊Lotso21 分钟前
【Linux网络】深入理解传输层 UDP 协议:从底层原理到实战应用
linux·运维·服务器·c语言·网络·c++·udp
小欣加油22 分钟前
leetcode542 01矩阵
数据结构·c++·算法·leetcode·矩阵·bfs