Как обновить высоту AVL TREE после поворота?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как обновить высоту AVL TREE после поворота?

Сообщение Anonymous »


Изображение

Я пытаюсь реализовать Мы с AVL TREE столкнулись с проблемой: как обновлять высоту всякий раз, когда я вставляю новый узел?
Я знаю, что мне нужно обновлять высоту узла до конца.< /p>
Например, на изображении дерево имеет 2 узла: 50 и 52. H означает высоту, а BF означает коэффициент баланса. После вставки узла 51 и обновления высот всех его предков (52 и 50) я сталкиваюсь с узлом 50, высота которого обновлена ​​до 3, а BF — до 2, и он становится несбалансированным.
После выполнения поворота вправо влево высоты перепутались. Как правильно обновить высоту после любого поворота?
Коэффициент баланса = node.right - node.left
public void insertTree(String word) {

if (nodeCount == 0) {

this.root = new AVLNode(word, 1, 0, null, null, null);

AVLNode left = new AVLNode(null, null, 0, 0, this.root, null, null);
AVLNode right = new AVLNode(null, null, 0, 0, this.root, null, null);

this.root.setLeft(left);
this.root.setRight(right);

this.nodeCount++;
return;
}

AVLNode nodeFound = treeSearch(word, this.root);
AVLNode left = new AVLNode(null, 0, 0, nodeFound, null, null);
AVLNode right = new AVLNode(null, 0, 0, nodeFound, null, null);

nodeFound.setWord(word);
nodeFound.setLeft(left);
nodeFound.setRight(right);
nodeFound.setHeight(1);
nodeFound.setBF(0);

this.nodeCount++;

// Update height

updateTree(nodeFound.getParent());

}

public void updateTree(AVLNode node) {

while (node != null) {

AVLNode nodeParent = node.getParent();

node.setHeight(height2(node));
balanceFactor(node);
// Check if its necessary to do any rotation. Update the ancestor of the node
balance(node);
node = nodeParent;
}

}

public int height(AVLNode node) {

int heightLeft = node.getLeft().getHeight();
int heightRight = node.getRight().getHeight();

int height = 1 + Math.max(heightLeft, heightRight);

return height;

}


Подробнее здесь: https://stackoverflow.com/questions/740 ... a-rotation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Последовательность чисел, над которой выполняются различные операции, представленная в виде дерева AVL.
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Ошибка дампа ядра при вставке в дерево avl
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Несогласованность указателя в модифицированном шаблоне структуры очереди с использованием AVL
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Дерево C++ AVL — замена рекурсии
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Получение AttributeError: объект «NoneType» не имеет атрибута «rightnode» в дереве avl
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»