class Solution { public: vector<TreeNode*> inorder; void inorderTraversal(TreeNode* root) { if(root==NULL)return ; inorderTraversal(root->left); inorder.push_back(root); inorderTraversal(root->right); } TreeNode* build(int l,int r) { if(l>r)return NULL; int mid = l+(r-l)/2; TreeNode* root = inorder[mid]; root->left = build(l,mid-1); root->right = build(mid+1,r); return root; } TreeNode* balanceBST(TreeNode* root) { if(root==NULL)return root; inorderTraversal(root); int n = inorder.size(); root = build(0,n-1); return root; } };