题目
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
1、节点的左子树只包含小于当前节点的数;
2、节点的右子树只包含大于当前节点的数;
3、所有左子树和右子树自身必须也是二叉搜索树。
示例 :
输入:
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
注意点
1、二叉搜索树是左子树都小于根节点,右子树都大于根节点;而不仅仅是左节点小于根节点,右节点大于根节点;
2、所以我们在判断一个节点是否符合要求时,只需要判断该节点是否在合适得范围内。例如:
- 根节点为任意值,所以取值为[null,null](null表示任意值);
- 左子树必须小于根节点,所以取值为[null,root.val];
- 右子树点必须大于根节点,所以取值为[root.val,null]。
实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode l