Я пытаюсь реализовать дерево AVL. Я дал входные данные 20,18,17.
Теперь, когда я создаю объект дерева, я назначаю 20 как root, а затем добавляю 18 и 17. Как только вставляется 17, я выполняю следующие вещи -
1) Обновление коэффициента баланса - я назначил balanceFactor каждому узлу, и при каждой вставке я обновляю BalanceFactor. 2) После обновления BalanceFactor я запускаю al oop, чтобы проверить, есть ли balanceFactor> 1 или <-1. и я называю эту функцию. Это пример вращения LL. </p>
public void RotateTree(AVLTree<T> nodewithProblem, AVLTree<T> Nextnode, AVLTree<T> NxtNxtNode)
{
List<AVLTree<T>> listO = new List<AVLTree<T>>();
if (nodewithProblem.Leftnode == Nextnode && nodewithProblem.Leftnode.Leftnode == NxtNxtNode)
{
nodewithProblem.Parentnode = Nextnode;
NxtNxtNode.Parentnode = Nextnode;
Nextnode.Parentnode = nodewithProblem.Parentnode;
Nextnode.Rightnode = nodewithProblem;
Nextnode.Leftnode = NxtNxtNode;
nodewithProblem.Leftnode = null;
if(nodewithProblem == this.root)
{
nodewithProblem.root = Nextnode;
this.root = Nextnode;
}
}
- Здесь NodeWithProblem - это узел с unbalancedFactor, а два других - это последовательные узлы, которые он имеет на своем пути вставки.
- Вот дерево object
AVLTree<int> treeObject = new AVLTree<int>(20);
treeObject.Insert(18);
treeObject.Insert(17);
Вот его класс
class AVLTree<T> : IComparable<AVLTree<T>> where T : IComparable
{
T value;
AVLTree<T> Leftnode;
AVLTree<T> Rightnode;
AVLTree<T> Parentnode;
int BalancingFactor;
AVLTree<T> root;
int HeightofNode;
public AVLTree(T value)
{
this.value = value;
this.BalancingFactor = 0;
this.Leftnode = null;
this.Rightnode = null;
if (root == null)
{
root = this;
}
}
Теперь, когда я выполняю это и смотрю на мой объект Tree, root остается тем же, в то время как примененные изменения сделанный. Я имею в виду, что если в Visual Studio я наведу курсор на Tree Object, то первый узел, который появляется, все еще является начальным узлом 20, тогда как он должен быть 18.
Как я могу добиться этого и что не так?