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
    }
};
相关推荐
算法鑫探5 小时前
闰年判断:C语言实战解析
c语言·数据结构·算法·新人首发
WBluuue5 小时前
数据结构与算法:康托展开、约瑟夫环、完美洗牌
c++·算法
木子墨5165 小时前
LeetCode 热题 100 精讲 | 并查集篇:最长连续序列 · 岛屿数量 · 省份数量 · 冗余连接 · 等式方程的可满足性
数据结构·c++·算法·leetcode
2501_921960856 小时前
双相自指图与弦论边界非对易性的结构同源
数据结构
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX16 小时前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白7 小时前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin7 小时前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
weixin_513449967 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf7 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer