我正在尝试检查给定的二叉树是否是二进制搜索树。我要做的是执行二叉树的顺序遍历,并将当前元素与前一个元素进行比较。如果当前元素更大,我们继续并进一步检查给定树是否无效。
int prev=0;
public int isValidBST(TreeNode A) {
if(A==null)
return 1;
isValidBST(A.left);
// System.out.println("val "+A.val);
if(A.val<=prev)
return 0;
// else if(A!=null){
prev=A.val;
//System.out.println("prev "+prev);
isValidBST(A.right);
if(isValidBST(A.right)==1&&isValidBST(A.left)==1)
return 1;
return 0;
}
所以这是我写的代码。我在这里做错了什么?
答案 0 :(得分:1)
每个子树只有一个递归调用!使用boolean!
int prev=0;
public boolean isValidBST(TreeNode A) {
if( A == null ) return true;
if( ! isValidBST(A.left) ) return false;
if( A.val <= prev ) return false;
prev = A.val;
if( ! isValidBST(A.right) ) return false;
return true;
}
答案 1 :(得分:1)
如果您希望树也具有非明确值,则可以从node.data <= prev.data
TreeNode prev=null;
public boolean isValidBST(TreeNode node)
{
//null is a valid bst
if(node==null){
return true;
}
// traverse the tree in inorder fashion and
// keep a track of previous node
if (!isValidBST(node.left)){
return false;
}
// compare current data with previous one
if (prev != null && node.data <= prev.data){
return false;
}
prev = node;
//check right subtree
return isValidBST(node.right);
}