当前位置: 首页 > 知识库问答 >
问题:

如何检查给定的BST是否有效?[重复]

汲雅珺
2023-03-14

我试图检查一个给定的二叉树是否是二叉查找树。我要做的是对二叉树进行有序遍历,并将当前元素与前一个元素进行比较。如果当前元素更大,我们继续进一步检查,否则给定的树是无效的。

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;
}

这是我写的代码。我到底做错了什么?

共有2个答案

巫马昆杰
2023-03-14

> < li >建议:您可以让您的方法返回boolean而不是int。 < li >此外,我更喜欢使用空节点而不是变量。通过这种方式,你可以让你的树存储除整数以外的值(只需要改变比较逻辑)。 < li>

如果您希望树也具有非唯一值,则可以从< code>node.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);
}
芮建茗
2023-03-14

每个子树只有一个递归调用!使用布尔值!

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;
}
 类似资料:
  • 问题内容: 我有一个小程序,允许用户输入一些正则表达式。之后,我想检查此输入是否为 有效的 正则表达式。 我想知道Java中是否有内置方法,但是找不到这种喷射器。 你能给我一些建议吗? 问题答案: 这是一个例子。 然后输出,例如。

  • 检查给定的IBAN地址是否有效。注意,IBAN对象也有此方法。 调用: web3.eth.Iban.isValid(address) 参数: address:String,要检查的IBAN地址 返回值: Boolean:有效的地址则返回true,否则返回false 示例代码: web3.eth.Iban.isValid("XE81ETHXREGGAVOFYORK"); > true web3.

  • 问题内容: 如何在Java中验证JSON字符串?还是可以使用正则表达式解析它? 问题答案: 一个疯狂的主意,尝试解析它并捕获异常: 该代码使用org.json JSON API实现,该实现在github,maven和部分Android上可用。

  • 问题内容: 我的webapp允许用户上传jar文件。但是,将jar文件上传后,它已损坏。我已经通过比较md5校验和(winmd5free)对此进行了验证。 上传的jar文件看起来“正常”和“正确” 与原始文件相比,文件大小看起来不错(在KB级别) 我可以使用7z打开上载的jar文件并查看其内容(资源和类文件),并且与原始文件相比,一切都相同 当我打开上载的jar文件(使用Notepad ++)时,

  • 检查指定的字符串是否是有效的以太坊地址。如果地址同时使用了大小写字符, web3.utils.isAddress()方法也会检查校验和。 调用: web3.utils.isAddress(address) 参数: address - String: 要检查的地址字符串 返回值: Boolean:有效地址则返回true,否则返回false 示例代码: web3.utils.isAddress('0

  • 我正在和一个班合作。我正在使用一些方法。 我需要检查我需要传递的参数,来调用这个方法。我就是这样做的 它工作得很好,但我知道有些方法有重载(没有参数),但这段代码只显示最后声明的方法(有参数要调用)。我怎样才能同时得到这两个重载? 这就是它的样子(我知道这个方法有重载) 例如另一个类:类扫描比打印方法方法 要扫描的代码 类的构造函数,它扫描给定的对象。 这就是我打印它们的方式。