Java 验证二叉搜索树

Java 验证二叉搜索树,java,binary-search-tree,depth-first-search,Java,Binary Search Tree,Depth First Search,我正在处理一个leetcode问题,其中要求我检查二叉搜索树是否有效。到目前为止,我的解决方案只通过了75个测试用例中的58个。有没有关于我哪里出了问题以及如何解决的建议 问题是: 给定一个二叉树,确定它是否是有效的二叉搜索树(BST) 假设BST的定义如下: 节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。 左子树和右子树也必须是二进制搜索树 例1: 2 / \

我正在处理一个leetcode问题,其中要求我检查二叉搜索树是否有效。到目前为止,我的解决方案只通过了75个测试用例中的58个。有没有关于我哪里出了问题以及如何解决的建议

问题是:

给定一个二叉树,确定它是否是有效的二叉搜索树(BST)

假设BST的定义如下:

节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。 左子树和右子树也必须是二进制搜索树

例1:

                     2
                    / \
                   1   3
输入:[2,1,3]

输出:真

例2:

                     5
                    / \
                   1   4
                      / \
                     3   6
输入:[5,1,4,空,空,3,6]

输出:false

说明:根节点的值为5,但其右子节点的值为4

以下是我的解决方案:


class Solution {
    public boolean isValidBST(TreeNode root) {
        
        return isValidHelper(root); 
    }
    
    public boolean isValidHelper(TreeNode root)
    {
        if(root == null)
            return true; 
        
        
        isValidHelper(root.left); 
        
 if(root.left != null && !(root.left.val < root.val) || root.right != null && !(root.right.val > root.val))
            return false; 
        
        isValidHelper(root.right); 
        
        return true;
    }
}


类解决方案{
公共布尔值IsValidST(树节点根){
返回isValidHelper(根);
}
公共布尔值isValidHelper(TreeNode根)
{
if(root==null)
返回true;
isValidHelper(根,左);
如果(root.left!=null&&!(root.left.valroot.val))
返回false;
isValidHelper(root.right);
返回true;
}
}

在以下情况下,您的程序会失败:

     5
   3   7
  1 6
因为您只比较子树根的值

我不是故意的。你会学到更多,自己去发现