LeetCode validate-binary-search-tree

 题目描述

判断给出的二叉树是否是一个二叉搜索树(BST)

二叉搜索树的定义如下

  • 一个节点的左子树上节点的值都小于自身的节点值
  • 一个节点的右子树上节点的值都小于自身的节点值
  • 所有节点的左右子树都必须是二叉搜索树

如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读

我们用如下方法将二叉树序列化:

二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。

例如:

   1↵  / ↵ 2   3↵    /↵   4↵    ↵     5

上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".

解题思路

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode *root) {
        return solve(root, INT_MIN, INT_MAX);
    }
    
    bool solve(TreeNode *root, int lower, int upper){
        if(root == NULL)
            return true;
        if(root->val <= lower || root->val >= upper)
            return false;
        else   //给每个节点更新它可以的范围
            return solve(root->left, lower, root->val) && solve(root->right, root->val, upper);
    }
};
发布了169 篇原创文章 · 获赞 9 · 访问量 4832

猜你喜欢

转载自blog.csdn.net/weixin_41317766/article/details/100978447