98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
解题代码如下:
需要注意的是这题数据越界比较严重
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void dfs(struct TreeNode* root,int max,int min,int *r){
if(root&&(*r)!=1){
if(root->val>=2147483247){
root->val=root->val-500;
}
if(root->val<=-2147483248){
root->val=root->val+500;
}
printf("|%d %d %d",root->val,min,max);
if(root->val>=max||root->val<=min){
*r=1;
}
dfs(root->left,root->val,min,r);
dfs(root->right,max,root->val,r);
}
}
bool isValidBST(struct TreeNode* root){
int min=-2147483640,max=2147483647;
int *r=(int *)malloc(sizeof(int));
*r=0;
dfs(root,max,min,r);
if((*r)==1){
return false;
}
else{
return true;
}
}