难度中等471
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
| 12
 3
 4
 5
 
 | 输入:2
 / \
 1   3
 输出: true
 
 | 
示例 2:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | 输入:5
 / \
 1   4
 / \
 3   6
 输出: false
 解释: 输入为: [5,1,4,null,null,3,6]。
 根节点的值为 5 ,但是其右子节点值为 4 。
 
 | 
dfs 递归版本
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public:
 int flag;
 bool dfs(TreeNode* root,long long int lower,long long int higher){
 if(root==NULL){
 return true;
 }
 long long  int temp=root->val;
 if(temp<=lower||temp>=higher){
 return false;
 }
 return dfs(root->left,lower,temp)&&dfs(root->right,temp,higher);
 
 }
 
 bool isValidBST(TreeNode* root) {
 flag=1;
 return dfs(root,LONG_MIN,LONG_MAX);
 
 
 }
 
 
 };
 
 |