#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. Действительно, имеет больше смысла.