我有一些具体的问题。我需要实现通常的二叉树方法,但在完成之后,我必须添加"hits“。更具体地说,每次我发现某个节点(或者只是遍历它)时,Node就会受到攻击。举例:
想象一下普通的二叉树有两个父母和两个孩子。假设我必须找到这两个孩子中的一个。为了让我这样做,我必须遍历根,然后父母,然后我才能找到一个孩子。因此,每一个被遍历的节点都会受到攻击。随着时间的推移它会积累起来。所以很明显,根总是有最多的命中。我希望我能让你更容易理解。
我实现了一些方法,它运行得很好。不幸的是,每次创建新节点时,点击次数都应该设置为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是节点类型。我该如何解决这个问题?
发布于 2016-10-04 15:44:48
我认为如果每个节点都有自己的命中计数,会更容易一些。然后,每次访问该节点时,您都可以调用一个将命中计数增加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();
}
}https://stackoverflow.com/questions/39856464
复制相似问题