我有点具体问题。我需要实现通常的二叉树方法,但在完成之后我必须添加" hits"。更具体地说,每当我找到一个Node(或只是遍历它)时,Node就会受到攻击。给出的例子:
想象一下正常的二叉树有两个父母和两个孩子。让我们假设我必须找到两个孩子中的一个。为了让我这样做,我必须在我能够生孩子之前穿过根,然后是父母。因此,遍历的每个节点都会受到影响。它随着时间的推移而积累。显然,root总会有最多的点击率。我希望我更容易理解。
我实现了方法,它运行得很好。不幸的是,每次创建新节点时,命中数应设置为0.问题出现的地方。
我宣布int[] hitCounter = new int[]
并使用以下代码:
public class BinaryTree {
Node root;
int[] hitCounter = new int[1000];
public void add(int data) {
Node addingNote = new Node(data);
if (root == null) {
root = addingNote;
hitCounter[addingNode] = 0;
} else
addNode(root, addingNote);
}
我认为这样可行,但显然hitCounter[addingNode] = 0;
不起作用,因为hitCounter
是数组类型而addingNode
是节点类型。我该如何解决这个问题?
答案 0 :(得分:2)
我认为如果每个节点都有自己的命中数会更容易。然后,每次访问该节点时,您都可以调用一个将命中计数增加1的函数(hitCountIncrement)。您还可以在每个节点上使用一种方法将命中计数重置为0(hitCountReset)。最后,您可以在BinaryTree类中使用一个遍历所有节点的方法,并在需要时调用每个节点上的hitCountReset方法。
编辑:
示例代码
public class Node{
int hitCount = 0; //this should be set in the constructor
public void hitCountIncrement() {
hitCount++;
}
public void hitCountReset() {
hitCount = 0;
}
}
public class BinaryTree {
public void resetAllCounts(){
for(Node currNode:Nodes){
currNode.hitCountReset();
}
}