我在使用我的编码项目时遇到了一些麻烦。该程序是一个包含WordCount对象的二进制搜索树。它们只包含两个字段,一个字符串和一个整数,用于保存单词在文本文件中出现的次数。
我遇到问题的方法需要遍历树以找到最常用的单词。我已经实现了一个可以完成这个技巧的方法,但我发现该方法应该是递归的而不是使用参数。
我已经写过的方法是:
WordCount getMostCommonWord(BinaryTreeNode<WordCount> wordNode)
throws EmptyCollectionException {
WordCount current = wordNode.getElement();
BinaryTreeNode left = wordNode.getLeftChild();
BinaryTreeNode right = wordNode.getRightChild();
WordCount maxLeft;
WordCount maxRight;
if (left != null) {
maxLeft = getMostCommonWord(left);
if (current.getCount() < maxLeft.getCount()) {
current = maxLeft;
}
}
if (right != null) {
maxRight = getMostCommonWord(right);
if (current.getCount() < maxRight.getCount()) {
current = maxRight;
}
}
return current;
}
这也是我第一次发布在这里,很抱歉,如果我做错了。关于如何在没有参数的情况下使其工作的任何提示都会有很大帮助。提前谢谢!
答案 0 :(得分:0)
你很亲密。由于您无法使用参数,因此请直接在节点类上创建此方法。然后使用this
。
这样做的优点是通用,但需要在您的情况下T
,wordCount
实现Comparable
。
BinaryTreeNode<T> getMaxNode()
throws EmptyCollectionException {
BinaryTreeNode<T> left = this.getLeftChild();
BinaryTreeNode<T> right = this.getRightChild();
BinaryTreeNode<T> currentMax = this;
BinaryTreeNode<T> maxLeft;
BinaryTreeNode<T> maxRight;
if (left != null) {
maxLeft = left.getMaxNode();
if (this.getElement() < maxLeft.getElement()) {
currentMax = maxLeft;
}
}
if (right != null) {
maxRight = right.getMaxNode();
if (this.getElement() < maxRight.getElement()) {
currentMax = maxRight;
}
}
return currentMax;
}