Как отразить вращение дерева AVL на исходном объекте Tree, используя C#? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь реализовать дерево 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.

Как я могу добиться этого и что не так?

...