【问题标题】:How to check whether a given BST is valid or not? [duplicate]如何检查给定的 BST 是否有效? [复制]
【发布时间】:2018-01-24 09:17:50
【问题描述】:

我正在尝试检查给定的二叉树是否是二叉搜索树。我想要做的是执行二叉树的中序遍历并将当前元素与前一个元素进行比较。如果当前元素更大,我们会继续检查,否则给定的树是无效的。

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 而不是布尔值?
  • 为左右调用两次 isValidBST 势必会对您的全局变量造成严重破坏。
  • 您能否提供一个示例,说明您的代码没有产生正确的输出(换句话说,MCVE)?

标签: java algorithm data-structures tree binary-search-tree


【解决方案1】:

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

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

【讨论】:

  • @Sorin 谢谢!我正要解决这个问题:-)
  • 感谢您的意见。关于函数的返回类型,我在一个已经定义函数签名的网站上练习,所以我必须使用给定的内容。
  • 嗯,您可以轻松恢复为 int。
【解决方案2】:
  1. 建议:您可以让您的方法返回布尔值而不是整数值。
  2. 另外,我更喜欢使用空节点而不是变量。通过这种方式,您可以让您的树也存储 -ve 值和整数以外的值(只需要更改比较逻辑)。
  3. 如果你希望你的树也有不明确的值,那么你可以从node.data &lt;= 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);
    }
    

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2015-05-23
  • 2010-11-02
  • 1970-01-01
  • 2012-08-05
  • 2021-03-21
  • 2013-04-18
相关资源
最近更新 更多