题目描述链接:https://leetcode-cn.com/problems/balance-a-binary-search-tree/
解题思路:对二叉搜索树进行中序遍历,得到其有序序列,然后在重新建立满足条件的平衡二叉树。
【参考代码】
/** * 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: vector<TreeNode *>vec; TreeNode* balanceBST(TreeNode* root) { /* 中序访问二叉树,得到其中序遍历结果,根据其中序遍历结果构建平衡二叉树 */ /* 通过迭代法进行中序遍历 */ TreeNode *p=root; stack<TreeNode *>S; while(p||!S.empty()){ if(p){ S.push(p); p=p->left; } else{ vec.push_back(S.top()); p=S.top()->right; S.pop(); } } //cout<<vec.size()<<endl; int len=vec.size(); return createNewTree(vec,0,len-1); } TreeNode* createNewTree(vector<TreeNode*>&vec,int left,int right){//这里应该使用引用传参,或者全局变量,否则会超时,因为最后一个用例比较大 if(left<=right){ int mid=(left+right)/2; TreeNode *root =vec[(left+right)/2]; root->left=createNewTree(vec,left,mid-1); root->right=createNewTree(vec,mid+1,right); return root; } return NULL; } };