java - 堆的搜索函数

标签 java search heap

我创建了一个通用的二叉堆 (MaxHeap),在其中我必须根据节点中存在的值搜索特定节点。我已经使用 Pre-OrderTraversal 来实现搜索函数,并且它应该给出顺序为 n 的运行时间,其中 n 是堆中的节点数。我的代码似乎不起作用。它永远不会进入 preOrderT 函数中存在的第二个“else if”。您能否建议可以对其进行哪些更改?

我的节点类已定义为包含一个整数键(根据其排列堆)、一个通用对象值以及对父级、leftChild 和 rightChild 的引用。

public Node<E> search(E p){
    Node<E> N;

    N= preOrderT(root, p);
    return N;
}

public Node<E> preOrderT(Node<E> N, E p){
    Node<E> M=null;

    if (N.value==p) M=N;
    else if (M==null && N.leftChild!=null){ M=preOrderT(N.leftChild, p);}
    else if (M==null && N.rightChild!=null){ M=preOrderT(N.rightChild, p);}
    return M;
}

最佳答案

问题是,如果存在 leftChild,那么您永远不会给它机会检查 rightChild。相反,在检查完 leftChild 后,如果尚未找到该值,请检查 rightChild

关于java - 堆的搜索函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42599978/

相关文章:

java - 如何在任何语言中翻转整数中特定位置的位

php - 如果 SQL 在 PHP 中没有返回任何内容,则输出一条消息

java - 行业标准布局管理器

java - Spring - 字段需要一个无法找到的 bean 类型

php - 搜索庞大的社交数据库

string - 蛮力字符串匹配概念

c - 最大堆段错误

Python:heapq.heappop() 给出奇怪的结果

algorithm - 无法理解 K-way 合并算法(给出了反例)

java - 如何修改 JComponent 的 setBounds 方法?