Leetcode1382. 将二叉搜索树变平衡

1382. 将二叉搜索树变平衡 - 力扣(LeetCode)

思路

中序遍历 + 二分递归建树

解题过程

  1. 中序遍历原BST,得到有序数组

  2. 用有序数组构建平衡BST(每次取中间元素作为根)

复杂度

时间复杂度: 𝑂(𝑛)

空间复杂度: 𝑂(𝑛)

核心代码

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 /**
 * 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:
    void dfs(vector<int>&ans, TreeNode*root){  //1.对原来的二叉搜索树进行中序遍历
        if(!root){
            return;
        }
        dfs(ans, root->left);
        ans.push_back(root->val);
        dfs(ans, root->right);
    }
    TreeNode* create(vector<int>&ves, int left, int right){ //2.根据中序遍历结果,构建平衡二叉搜索树
        if(left > right){ //边界判断:区间无效,直接返回空。
            return nullptr;
        }
        if(left == right){ //单元素,直接创建叶子节点
            return new TreeNode(ves[left]);
        }
        //多元素,取中间当根,左右递归建子树
        int mid = (left + right)>>1;
        TreeNode* root = new TreeNode(ves[mid]);
        root->left = create(ves, left, mid-1);
        root->right = create(ves, mid + 1, right);
        return root;
    }
    TreeNode* balanceBST(TreeNode* root) {
        vector<int>ans;
        dfs(ans, root);//中序遍历原树,收集所有节点值
        return create(ans, 0, ans.size() -1 );//用有序数组递归构建平衡BST
    }
};
相关推荐
爱吃香菜的初学者19 小时前
八.数据结构——哈希表(1)
数据结构·散列表
ZhengEnCi19 小时前
2026年10月30日AI早报:Gemini 4 Carbon登顶、DeepSeek融资1055亿、智元机器人上岗实测
人工智能·算法
强哥聊算力20 小时前
《算力江湖·Intel帝国往事》第三集:安迪·格鲁夫的铁血时代:Intel为什么能把对手逼到墙角?
运维·人工智能·科技·算法·ai·gpu算力
Shaoshing20 小时前
LeetCode100 11. 盛最多水的容器
算法·leetcode
骑着蜗牛撵大象32720 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
Eyfcom21 小时前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统
xunberg21 小时前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
海绵宝宝转agent21 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
pjj1985421 小时前
YOLO 目标检测算法系列梳理:从 V1 到 V5 的原理演进
算法·yolo·目标检测
二十七日秋1 天前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法