leetcode-1382:将二叉搜索树变平衡

简介: leetcode-1382:将二叉搜索树变平衡

题目

题目连接

给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。

如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平衡的 。

示例 1:

输入:root = [1,null,2,null,3,null,4,null,null]
输出:[2,1,3,null,null,null,4]
解释:这不是唯一的正确答案,[3,1,4,null,2,null,null] 也是一个可行的构造方案。

示例 2:

输入: root = [2,1,3]
输出: [2,1,3]

解题

方法一:中序遍历转数组+重建平衡二叉树

class Solution {
public:
    vector<int> arr;
    void traversal(TreeNode* cur){
        if(!cur) return;
        traversal(cur->left);
        arr.push_back(cur->val);
        traversal(cur->right);
    }
    TreeNode* getTree(int l,int r){
        if(l>r) return nullptr;
        int mid=(l+r)/2;
        TreeNode* cur=new TreeNode(arr[mid]);
        cur->left=getTree(l,mid-1);
        cur->right=getTree(mid+1,r);
        return cur;
    }
    TreeNode* balanceBST(TreeNode* root) {
        traversal(root);
        return getTree(0,arr.size()-1);
    }
};
相关文章
|
机器学习/深度学习 存储 算法
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
72 1
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
89 1
|
Python
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
119 4
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
|
Python
【Leetcode刷题Python】96. 不同的二叉搜索树
LeetCode 96题 "不同的二叉搜索树" 的Python解决方案,使用动态规划算法计算由1至n互不相同节点值组成的二叉搜索树的种数。
98 3
【Leetcode刷题Python】96. 不同的二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
115 0
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
68 0
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
129 0
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
80 0
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
82 0