首页 > 其他 > 详细

LeetCode 1382.将二叉搜索树变平衡

时间:2020-11-16 17:31:19      阅读:21      评论:0      收藏:0      [点我收藏+]

题目描述链接: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;
    }
};

 

LeetCode 1382.将二叉搜索树变平衡

原文:https://www.cnblogs.com/zzw-/p/13985636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!