98.验证二叉搜索树
题目描述
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含小于当前节点的数
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须是二叉搜索树。
做题思路
因为二叉搜索树的中序遍历序列是升序的,所以只需要遍历一遍二叉树,然后判断其中序遍历序列是否为升序,就能判断是否为一棵二叉搜索树。
一些注意事项:
- 数据类型
long long
是C++11中重新定义的,标准规定它最小是64bit INT_MAX
和INT_MIN
是 C++ 的两个预定义宏,代表了整型变量能够存储的最大正整数和最小负整数,分别为 2147483647 和 -2147483648。这两个宏在头文件<climits>
中定义。INT_MAX
表示一个 32 位符号整数所能够表示的最大值,也就是 2^31 − 1。而INT_MIN
则表示最小的负整数。这个值是相对于二进制补码表示法的,也就是说,负数的范围比正数大 1。
代码:
bool isValidBST(TreeNode* root){
stack<TreeNode*> s;
long long inorder = (long long)INT_MIN-1;
while(!s.empty() || root != nullptr){
while(root != nullptr){
s.push(root);
root = root -> left;
}
root = s.top();
s.pop();
if(root->val <= inorder)
return false;
inorder = root->val;
root = root->right;
}
return true;
}