Tree 关于二叉树旋转

Tree 关于二叉树旋转,tree,binary-tree,pascal,Tree,Binary Tree,Pascal,我想在pascal上编程一个AVL。我已经编写了一个常规的二叉树,它可以工作了,我正在尝试制作一个自平衡的二叉树,我遇到了一个问题 我有一个要旋转的子树,问题是我不知道如何分配子树根节点指针的父节点。下一棵树的含义: 要旋转的子树的根节点=30 子树的父节点=55 55 55 30 60 -----> 45

我想在pascal上编程一个AVL。我已经编写了一个常规的二叉树,它可以工作了,我正在尝试制作一个自平衡的二叉树,我遇到了一个问题

我有一个要旋转的子树,问题是我不知道如何分配子树根节点指针的父节点。下一棵树的含义: 要旋转的子树的根节点=30 子树的父节点=55

          55                                      55          
       30    60            ----->           45         60         
   10    45    75                        30   50          75       
  5  15    50    90                     10                    90
                                      5    15                
我该如何将指针从55改为30,从55改为45?
我看到的大多数代码都没有从节点指向其父节点的指针,因此我不知道如何更改它。

您没有显示任何代码,但通常会按照

Root := Root.Rebalance;
也就是说,您调用子树来重新平衡自身,并且该重新平衡函数返回根作为其结果。该结果可能与以前的根节点相同,或者(在您的场景中)是一个新的根节点