/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
private:
    vector<int> vin;
public:
    /**
     * 
     * @param root TreeNode类 the root
     * @return int整型vector
     */
    vector<int> findError(TreeNode* root) {
        // write code here
        inorder(root);
        
        int left = 0, right = vin.size()-1;
        while(left < vin.size() && vin[left] < vin[left+1]){
            left++;
        }
        
        while(right > 0 && vin[right] > vin[right-1]){
            right--;
        }
        
        return {vin[right], vin[left]};
        
        
    }
    
    void inorder(TreeNode* root){
        if(root == nullptr){
            return;
        }
        
        inorder(root->left);
        vin.push_back(root->val);
        inorder(root->right);
    }
    
};