【二叉树】BST中序遍历【99. Recover Binary Search Tree】

题目链接:https://leetcode.com/problems/recover-binary-search-tree/#/description

/**
 * 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:
    //  第一个,第二个交换节点,中序遍历前驱节点
    TreeNode* fnode=NULL,*snode=NULL,*pre=NULL;
    void recoverTree(TreeNode* root) {
        getError(root);
        //  如果找到了两个异常的节点,则交换其val值
        if(fnode&&snode){
            int tmp=fnode->val;
            fnode->val=snode->val;
            snode->val=tmp;
        }
    }
    //  中序遍历,查找异常点
    void getError(TreeNode* root){
        if(root==NULL) return;
        getError(root->left);
        //  第一个节点没有找到的情况下
        if(fnode==NULL&&pre!=NULL&&pre->val>root->val){
            fnode=pre;  //  第一个出错,在前驱节点
        }
        //  找到第一个节点的情况下
        if(fnode!=NULL&&pre->val>root->val){
            snode=root;
        }
        pre=root;
        getError(root->right);
        return;
    }
};


你可能感兴趣的:(【leetcode】)