如何使用Java从类型Node转换为二叉树中的整数?

时间:2016-10-04 15:38:04

标签: java casting integer binary-tree

我有点具体问题。我需要实现通常的二叉树方法,但在完成之后我必须添加" 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是节点类型。我该如何解决这个问题?

1 个答案:

答案 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();
    } 
}