Как привести в Java из узла типа в целое число в двоичном дереве?

#java #casting #integer #binary-tree

#java #Кастинг #целое число #двоичное дерево

Вопрос:

У меня своего рода конкретная проблема. Мне нужно реализовать обычные методы двоичного дерева, но после того, как я закончу с этим, я должен добавить «хиты». Более конкретно, каждый раз, когда я нахожу какой-либо узел (или просто пересекаю его), этот узел получает попадание. Приведенный пример:

Представьте себе обычное двоичное дерево с двумя родителями и двумя дочерними элементами. Предположим, мне нужно найти одного из двух дочерних элементов. Для того, чтобы я мог это сделать, мне нужно пройти корень, затем родителей, прежде чем я смогу перейти к дочерним элементам. Следовательно, каждый из этих пройденных узлов получит попадание. И со временем оно накапливается. Очевидно, что 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. Почему hitCounter в классе нет int переменной Node ? Кроме того, hitCounter это не целочисленный тип, это тип массива. В вашем вопросе много неправильного. Это также не имеет никакого отношения к приведению. Сначала вы должны прочитать учебник, чтобы разобраться с основами.

2. Как это должно быть дальше? addingNote.HitCounter = 0; ?

Ответ №1:

Я думаю, было бы проще, если бы у каждого узла было свое собственное количество попаданий. Затем каждый раз, когда к этому узлу обращаются, вы можете вызывать функцию, которая увеличивает количество попаданий на 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();
    } 
}
  

Комментарии:

1. Действительно, имеет больше смысла.