我必須製作一個所謂的「命中平衡樹」。不同之處在於,您可以看到,我的節點類有一個名爲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