Реализация родительского узла в дереве AVL

Привет, ребята, я изучаю бинарные деревья и добился прогресса в изучении основ. Сейчас я изучаю AVL и пишу код, чтобы сбалансировать свое дерево. но я столкнулся с проблемой, так как корневой узел (родительский узел дерева) не сбалансирован. Я планирую добавить родительский узел в класс узла, чтобы отслеживать родительский узел, но не знаю, как реализовать дерево AVL с родительским узлом. Пожалуйста, может кто-нибудь показать пример, который будет действительно полезен.

Класс узла:

public class BinaryNode<T> {
  private BinaryNode<T> parent;
  private BinaryNode<T> leftChild;
  private BinaryNode<T> rightChild;
  private int height;
  private T data;

 public BinaryNode(T data) {
  this(data, null,null,null,0)'
   }
 public BinaryNode(T data, BinaryNode<T> parent, BinaryNode<T> leftChild, BinaryNode<T> rightChild, int height) {
 this.data=data;
 this.parent = parent;
 this.leftChild= leftChild;
 this.rightChild = rightChild;
 this.height = 0;
 }

АВЛ-дерево:

public class AVLTree  { 
 protected BinaryNode<T> root;
 public AVLTree() {}
 public AVLTree(T data) {
 root = new BinaryNode<T>(data);
 }

public void insert(T data) {
 BinaryNode<T> newNode = new BinaryNode<T>(data);
 if(root == null){
  root = newNode;
    }
  else {
    insert(root, newNode);
   }
  }

Как вы отслеживаете родительский узел. Родительский узел должен быть самым первым элементом, добавленным в список. Следующие узлы являются его дочерними элементами или потомками. Как реализовать бинарное дерево с родительским узлом. Пример был бы очень полезен, спасибо.


person Jennifer Fitzgerald    schedule 11.06.2015    source источник


Ответы (1)


Поскольку вы учитесь, я постараюсь указать вам правильное направление, а не давать вам код. Что обычно делается, так это вообще не «следить» за родительским узлом. Узлы обычно хранят только своих потомков (левого и правого потомков). Информацию о родителях можно найти в процессе рекурсивного спуска по дереву. Это помогает?

person JShell    schedule 11.06.2015