Files
leetcode-master/problems/1382.将二叉搜索树变平衡.md
youngyangyang04 390b83a53b Update
2020-10-24 16:40:20 +08:00

1.4 KiB

题目地址

https://leetcode-cn.com/problems/balance-a-binary-search-tree/

思路

这道题目,可以中序遍历把二叉树转变为有序数组,然后在根据有序数组构造平衡二叉搜索树。

建议做这道题之前,先看如下两篇题解:

这两道题目做过之后,本题分分钟就可以做出来了。

代码如下:

class Solution {
private:
    vector<int> vec;
    // 有序树转成有序数组
    void traversal(TreeNode* cur) {
        if (cur == nullptr) {
            return;
        }
        traversal(cur->left);
        vec.push_back(cur->val);
        traversal(cur->right);
    }
    有序数组转平衡二叉树
    TreeNode* getTree(vector<int>& nums, int left, int right) {
        if (left > right) return nullptr;
        int mid = left + ((right - left) / 2);
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = getTree(nums, left, mid - 1);
        root->right = getTree(nums, mid + 1, right);
        return root;
    }

public:
    TreeNode* balanceBST(TreeNode* root) {
        traversal(root);
        return getTree(vec, 0, vec.size() - 1);
    }
};