我试图在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? 我见过的大多数代码都没有从节点到其父节点的指针,因此我不知道如何更改它。
答案 0 :(得分:3)
您没有显示任何代码,但通常您会按照
的方式执行操作Root := Root.Rebalance;
也就是说,您调用子树来重新平衡自身,并且该重新平衡函数返回根作为其结果。该结果可能与以前的根相同,或者 - 在您的方案中 - 是新的根节点。