利用二叉搜索树的特性:中序遍历为升序,遍历二叉树即可。每次记录一下前驱节点的值,判断当前节点是否比前驱节点大,如果比前驱小,则遍历结束。如果遍历到最后一个节点还是满足则为二叉搜索树。
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
boolean isVa;
boolean first;
int min;
public boolean isValidBST (TreeNode root) {
// write code here
midorder(root);
return !isVa;
}
public void midorder(TreeNode root){
if(!isVa&&root!=null){
midorder(root.left);
if(!first){
min = root.val;
first = !first;
}
else {
if(min>=root.val) isVa = !isVa;
else min = root.val;
}
midorder(root.right);
}
}
}