leecode98——Validate Binary Search Tree

题目大意:判断一棵树是否是二叉搜索树

分析:dfs。二叉搜索树需要满足一个结点的左子树中的所有点都比他小,右子树中的所有点都比他大,并且它的左右子树也分别都是二叉搜索树。所以递归就需要两步,一是一直找到根节点左子树中的最大(最右)节点,并且判断根与最右结点&&根的左子树是不是二叉搜索树;二是一直找到根节点右子树中的最小(最左)结点,并且判断根与最左结点&&根的右子树是不是二叉搜索树。

代码:转载自https://leetcode.com/problems/validate-binary-search-tree/discuss/138650/Simple-C++-recursive-solution-beats-99.55

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if (!root) return true;
        
        bool left = true, right = true;
        TreeNode* p;
        if (root->left) {
            p = root->left;
            while (p->right)
                p = p->right;
            left = p->val < root->val && isValidBST(root->left);
        }
            
        if (root->right) {
            p = root->right;
            while (p->left)
                p = p->left;
            right = p->val > root->val && isValidBST(root->right);
        }
        return left && right;
    }
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80796509