leecode第九十八题(验证二叉搜索树)

/**
 * 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:
    void jiance(TreeNode* root,bool& is_BST,long& temp)
    {
        if(root->left!=NULL)
            jiance(root->left,is_BST,temp);
        
        if(temp<root->val)
            temp=root->val;
        else
            is_BST=false;
            
        if(root->right!=NULL)
            jiance(root->right,is_BST,temp);
    }
    bool isValidBST(TreeNode* root) {
        if(root==NULL)
            return true;
        bool is_BST=true;
        long temp=LONG_MIN;
        jiance(root,is_BST,temp);
        return is_BST;
    }
};

分析:

验证中序遍历为升序即可,只是在边界值有点恶心,我以为空树不算二叉搜索树,但其实算,而且leecode的输入[]和[null]答案居然不一样。最后想吐槽,结构里的val是int型,我设置temp一开始初始化INT_MIN,但是居然有个更小的。。

原文地址:https://www.cnblogs.com/CJT-blog/p/10811645.html