恢复二叉搜索树

  • 二叉搜索树有两个节点互换了位置,将它们恢复
class Solution {
public:
    void recoverTree(TreeNode* root) 
    {
        p = q = prev = NULL;
        if(!root) return;
        tranverse(root);
        swap(p->val, q->val);
    }

    void tranverse(TreeNode * root)
    {
        if(!root) return ;
        tranverse(root->left);
        if(prev && (prev->val > root->val)){
            if(!p) p = prev;
            q = root;
        }
        prev = root;
        tranverse(root->right);
    }
private:
    TreeNode * p, * q;
    TreeNode * prev;
};

你可能感兴趣的:(算法)