关于二叉树旋转

时间:2014-03-21 19:24:53

标签: tree binary-tree pascal

我试图在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? 我见过的大多数代码都没有从节点到其父节点的指针,因此我不知道如何更改它。

1 个答案:

答案 0 :(得分:3)

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

的方式执行操作
Root := Root.Rebalance;

也就是说,您调用子树来重新平衡自身,并且该重新平衡函数返回根作为其结果。该结果可能与以前的根相同,或者 - 在您的方案中 - 是新的根节点。