我必须制作一个所谓的“命中平衡树”。不同之处在于,您可以看到,我的节点类有一个名为numberOfHits的实例变量,您可以随时调用包含方法或findNode方法的增量。这个练习的要点是让顶部的命中数最高的节点,所以树基本上重建自己(或旋转)。根具有最高的命中数。如何返回BST中具有特定值的节点?
我有一个关于我必须做出的方法的问题,它返回具有最高命中数的节点。我稍后需要它来让树自动旋转(我猜,至少这是该计划)。这是我的节点类。 (当然所有的干将)
public class HBTNode<T> {
private HBTNode<T> left;
private HBTNode<T> right;
private T element;
private int numberOfHits;
public HBTNode(T element){
this.left = null;
this.right = null;
this.element = element;
this.numberOfHits = 0;
}
我到目前为止是这样的:
public int findMaxCount(HBTNode<T> node) {
int max = node.getNumberOfHits();
if (node.getLeft() != null) {
max = Math.max(max, findMaxCount(node.getLeft()));
}
if (node.getRight() != null) {
max = Math.max(max, findMaxCount(node.getRight()));
}
return max;
}
这工作得很好,但它返回一个integer.I需要返回的节点本身。因为我必须递归地做这件事,所以我决定找到最大的命中数,然后在另一个返回节点的方法中使用这个方法,就像这样(它可能真的效率很低,所以如果你有改进的提示,我正在听) :
public int findMaxCount() {
return findMaxCount(root);
}
public HBTNode<T> findMaxCountNode(HBTNode<T> node) {
if (node.getNumberOfHits() == this.findMaxCount()) {
return node;
}
if (node.getLeft() != null) {
return findMaxCountNode(node.getLeft());
}
if (node.getRight() != null) {
return findMaxCountNode(node.getRight());
}
return null;
}
我把这样的方法:
public HBTNode<T> findMaxCountNode() {
return findMaxCountNode(root);
}
它返回null,即使我想应该没事的,我不是擅长递归所以很明显,我失去了一些东西。如果您有任何关于我的这个练习,我愿意接受任何帮助,也有新的建议。非常感谢。
测试代码:
public static void main(String[] args) {
HBTree<Integer> tree = new HBTree<Integer>();
tree.add(50);
tree.add(25);
tree.add(74);
tree.add(19);
tree.add(8);
tree.add(6);
tree.add(57);
tree.add(108);
System.out.println(tree.contains(108)); //contains method increases the count by one
System.out.println(tree.contains(8));
System.out.println(tree.contains(8));
System.out.println(tree.contains(108));
System.out.println(tree.contains(8));
System.out.println(tree.contains(108));
System.out.println(tree.contains(108));
System.out.println(tree.contains(108));
System.out.println(tree.findMaxCountNode());
}
电流输出:true true true true true true true true null
预期输出:true true true true true true true true Element: 108 Left child: 6 //this is just a toString, doesn't matter at this point Right child: null Number of hits: 5
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码并准确描述问题之前,我们无法有效帮助您。具体而言,显示问题的测试用例在哪里,可能还有一些跟踪输出?我们应该看到来自调试尝试的输出,即使只有少数策略性地放置** print语句。 – Prune
感谢您的耐心,我会编辑它并发布输出。 – d3nls