题目需求
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
public class GeekSolutionIsValidBST98 {
private TreeNode preNode;
/**
中序遍历,看前一个节点是否比后一个节点小
*/
public boolean isValidBST2(TreeNode root) {
return inOrderValid(root);
}
private boolean inOrderValid(TreeNode root) {
if (root == null) {
return true;
}
if (!inOrderValid(root.left)) {
return false;
}
if (preNode != null && root.val <= preNode.val) {
return false;
}
preNode = root;
return inOrderValid(root.right);
}
/**
* 递归解法
*
* @param root
* @return
*/
public boolean isValidBST(TreeNode root) {
return validate(root, null, null);
}
private boolean validate(TreeNode root, Integer min, Integer max) {
if (root == null) {
return true;
}
if ((min != null && min > root.val) || (max != null && max < root.val)) return false;
return validate(root.left, min, root.val) && validate(root.right, root.val, max);
}
}
网友评论