LeetCode刷题实战98:验证二叉搜索树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 验证二叉搜索树,我们先来看题面:
https://leetcode-cn.com/problems/validate-binary-search-tree/
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and right subtrees must also be binary search trees.
题意
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
解题
class Solution {
public:
long long maxValue = LLONG_MIN;//中序遍历的当前最大值
bool isValidBST(TreeNode* root) {
if (root == NULL){
return true;
}
if (!isValidBST(root->left)){//首先判断左子树是否是搜索二叉树
return false;
}
if (root->val <= maxValue){//如果发现不大于之前的遇到的最大值,说明中序遍历不是严格的递增
return false;
}
maxValue = root->val;//更新中序遍历到此时,遇到的最大值
if (!isValidBST(root->right)){//首先判断右子树是否是搜索二叉树
return false;
}
return true;
}
};
上期推文: