【Leetcode】99. 恢复二叉搜索树【DFS】

题目链接 

题目的一个重要思路就是:
正确的二叉搜索树的中序遍历结果是递增的,利用这个定理,在中序遍历树的过程中寻找不满足条件的结点。

注意点

这道题目有一个特别有意思的点就是

下面的这组测试用例: [5,3,9,-2147483648,2]

里面有一个-2147483648,也就是INT_MIN,在判断的时候一定要注意。

我在 leetcode讨论 看到了一个C++的Soultion,可以通过1917中的1916个测试用例,唯一不能通过的情况就是这个。

一点小启发

通过这到题目,让我感受到了软件测试对极值情况一定要考虑充分。

想这一道题目就要考虑好:

1. 二叉搜索树的结点个数的特殊情况(2个结点的情况)

2. 二叉搜索树结点出现极值的情况(-2147483648)

My Code

/**
 * 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 {
    TreeNode* first=NULL;
    TreeNode* second=NULL;
    TreeNode* prev = new TreeNode(INT_MIN);
public:
    void recoverTree(TreeNode* root) {
        help(root);
        int tempValue=first->val;
        first->val=second->val;
        second->val=tempValue;
    }
    
    void help(TreeNode* root){
        if(root==NULL)  return;
        help(root->left);        
        if(first==NULL && prev->val >= root->val)   first=prev;
        if(first!=NULL && first->val==INT_MIN){
            first=NULL;
        }            
        if(first!=NULL && prev->val >= root->val)   second=root;
        prev=root;
        help(root->right);
    }
};

猜你喜欢

转载自www.cnblogs.com/shengwang/p/11312741.html
今日推荐