给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
解题思路:
本题可以直接使用二叉搜索树的特性,运用中序遍历时,二叉搜索树的节点值将会是一个严格递增的数列。因此,只需运用中序遍历便可以得出二叉搜索树是否有效。
可以引入一个变量temp,它将保存上个节点的值,若此时遍历到的节点的值小于temp时,便代表二叉树不是有效的二叉搜素树,直接返回false。唯一要额外考虑的就是第一个被遍历的节点,可以通过设置temp的初始值为一个极小的值来满足对第一个节点的遍历需要。
具体代码如下:
boolean res = true;
long temp = Long.MIN_VALUE;//存放上一个节点的数值
public boolean isValidBST(TreeNode root) {
//用中序遍历,只要找到了一个false,就再也不用遍历直接返回
if (root == null) return false;//处理根节点是null的情况
if (res && root.left != null) res = isValidBST(root.left);
if (root.val <= temp) {
return false;
}else {
temp=root.val;
}
if (res && root.right != null) res = isValidBST(root.right);
return res;
}