通过先序遍历得到有序数组,然后重建。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void tree2vector(TreeNode *root, vector<TreeNode *> &tree) {
if (root == NULL) {
return ;
}
TreeNode *left = root->left;
TreeNode *right = root->right;
root->left = NULL;
root->right = NULL;
tree2vector(left, tree);
tree.push_back(root);
tree2vector(right, tree);
}
TreeNode * solve(vector<TreeNode *> &tree, int l, int r) {
if (l == r) {
return tree[l];
}
else if (l > r) {
return NULL;
}
TreeNode *ans = NULL;
int mid = (l + r) >> 1;
ans = tree[mid];
ans->left = solve(tree, l, mid - 1);
ans->right = solve(tree, mid + 1, r);
return ans;
}
TreeNode* balanceBST(TreeNode* root) {
vector<TreeNode *> tree;
tree2vector(root, tree);
TreeNode *ans = solve(tree, 0, tree.size() -1);
return ans;
}
};