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

如何编写一个函数来检查给定的二进制搜索树是否包含给定的值?

商麒
2023-03-14

例如,对于以下树:

n1(值:1,左:空,右:空)n2(值:2,左:n1,右:n3)n3(值:3,左:空,右:空)调用包含(n2,3)应该返回true,因为根目录在n2的树包含数字3。

我是编程新手,试图解决理解编程概念的挑战。这不是作业问题。

我已经编写了下面的代码,但它总是返回false。

class Node {
   public int value;
   public Node left, right;

   public Node(int value, Node left, Node right) {
     this.value = value;
     this.left = left;
     this.right = right;
   }
  }

 public class BinaryTree {

   public static boolean contains(Node root, int value){
        if(root == null) return false;
        else
            return
                    contains(root.left, value) ||
                    contains(root.right, value);
    }

  public static void main(String[] args) {

        Node n1 = new Node(1, null, null);
        Node n3 = new Node(3, null, null);
        Node n2 = new Node(2, n1, n3);

        System.out.println(contains(n2,3));
    }
 }

共有1个答案

东方骏
2023-03-14

如果节点上的值与搜索的值相对应,则缺少检查。所以基本上总是返回false,因为在某一点上,root将等于null。为了避免这种情况,需要一个else-if子句,在该子句中检查节点的值和搜索的值,如果这两个值相等,则返回true。

public static boolean contains(Node root, int value){
    if(root == null) return false;
    else if (root.value==value) return true;
    else
        return
                contains(root.left, value) ||contains(root.right, value);
}
 类似资料:
  • 我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?

  • 本文向大家介绍检查Java ArrayList是否包含给定项,包括了检查Java ArrayList是否包含给定项的使用技巧和注意事项,需要的朋友参考一下 java.util.ArrayList.contains()方法可用于检查Java ArrayList是否包含给定项。此方法具有单个参数,即测试了其在ArrayList中是否存在的项目。如果该项目在ArrayList中存在,则返回true;如果

  • 检查给定行是否为java代码的正确方法是什么? 输入:日志支持。java:44 com/sun/activation/registries/LogSupport日志(Ljava/lang/String;)五、 预期输出:false。 输入:扫描仪输入=新扫描仪(系统输入); 预期输出:true。 我尝试了EclipseJDTASTParser来检查是否可以创建AST。代码如下: 但这是行不通的。有

  • org.springframework.dao.invalidDataAccessapiUsageException:参数值[D2_label1]与预期的类型[java.util.Collection(N/A)]不匹配;嵌套异常为java.lang.IllegalArgumentException:参数值[D2_label1]与org.springframework.orm.jpa.EntityM

  • 我知道如何检查给定的树是否是二叉树。但问题是,如果树包含重复的值,该怎么办。 如何检查可能包含重复值的树是否是二叉查找树重复值必须位于树/子树的右侧。