为BST

时间:2015-04-29 16:39:31

标签: java binary-search-tree equals

在Java中,要比较两个相等的异议,您必须同时实现equals方法和hashCode方法。我需要比较两个BST的平等性。在这种情况下如何实现hashCode方法?现在,在hashCode类上实现Node非常简单:想象一下我的数据是int。但我不能只添加节点的值来检查树是否相等。那我该怎么做?有人做过这个吗?

我正在考虑我可以做的许多不同的事情,但我不确定它们的可扩展性如何。例如,我可以使用级别顺序,并且每个级别乘以一个大的素数,但我不能确定这是否有效。所以也许有更好理解的人可以帮助我。感谢。

1 个答案:

答案 0 :(得分:6)

  

我不能只添加节点的值来检查树是否相等。

当然可以。 hashCode不必是唯一的,如果两个BST具有相同的内容,那么对节点内容求和将在每种情况下给出相同的结果,这满足hashCode契约。请注意 - return 0 总是 hashCode()的有效实施;不需要唯一性。

(实际上,对节点内容的hashCodes求和是TreeSet.hashCode()的实现方式。)

另一方面,如果你关心结构,你可以做一些简单的事情,比如用{/ 1>实现Node.hashCode()

int h = contents.hashCode();
h = h * 31 + Objects.hashCode(leftChild);
h = h * 31 + Objects.hashCode(rightChild);
return h;

...而且,这也会让你获得一个体面的结构 - 尊重哈希函数。