leetcode 99. 恢复二叉搜索树

中序遍历,弄在数组里面,再弄个数组复制一份排好序
比较哪里错了,换回来
中序遍历的时候用map存一下数字的地址(默认没有重复元素)

class Solution {
public:
    vector<int> zhong;
    map<int,TreeNode*> dizhi;
    void recoverTree(TreeNode* root) {
        if( root == nullptr ){
            return;
        }
        zhongxu(root);
        vector<int>paizhong(zhong);
        sort(paizhong.begin(),paizhong.end());
        //debug( zhong.size() )
        for(int i=0;i<zhong.size();i++){
            if(zhong[i] != paizhong[i]){
                swap( dizhi[ zhong[i] ]->val,dizhi[ paizhong[i] ]->val);
                //cout<<"1"<<endl;
                break;
            }

        }
    }
    void zhongxu( TreeNode * rt ){
        if( rt!= nullptr ){
            zhongxu( rt->left );
            zhong.push_back(rt->val);
            dizhi[rt->val] = rt;
            zhongxu( rt->right );
        }
    }
};

在这里插入图片描述

发布了286 篇原创文章 · 获赞 57 · 访问量 324万+

猜你喜欢

转载自blog.csdn.net/L1558198727/article/details/102576966
今日推荐