关于二叉树旋转
Posted
技术标签:
【中文标题】关于二叉树旋转【英文标题】:About binary tree rotations 【发布时间】:2014-03-21 19:24:53 【问题描述】:我正在尝试在 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】:您没有显示任何代码,但通常您会按照以下方式做一些事情
Root := Root.Rebalance;
也就是说,您调用子树来重新平衡自身,并且该重新平衡函数返回根作为其结果。该结果可能与以前的根相同,或者 - 在您的场景中 - 一个新的根节点。
【讨论】:
以上是关于关于二叉树旋转的主要内容,如果未能解决你的问题,请参考以下文章