阅读939 返回首页    go 技术社区[云栖]


AVL树的删除探讨

AVL树的删除很多教材上都没有提供,本人对AVL树有着较为深入的研究。现在晒出大体的算法思想。

 3.21 递归法
递归实现AVL树的结点删除的思想如下。
   AVLT上删除值为E的结点步骤如下:
(1)       若树T为空,返回0退出否则到(2;
(2)       比较T的数据和E,若相等跳到(3),若E小于T->data跳到(4),若E大于T->data则跳到(5
(3)       分析T结点的类型
(3.1)T是叶子结点则直接删除,树变矮即lower=1
(3.2)T只有右子树TR则将右子树结点的值赋给T,删除TR结点将T->rchild=NULLlower=1;
(3.3)T有左子树,则找到其中序遍历的前驱结点P,将P结点值用临时变量temp保存,并且用指针Tptr保存T;递归删除结点P;将Tptr所指结点即原T结点的值更新为temp
 4)在左子树T->lchild中递归删除值为E的结点,若删除成功检查左子树是否变矮即lower的值是否为1;若lower=0返回0退出;若lower=1则进行失衡调整各种情况上文有分析
 5)在右子树T->rchild中递归删除值为E的结点,若删除成功检查左子树是否变矮即lower的值是否为1;若lower=0返回0退出;若lower=1则进行失衡调整,各种情况上文有分析

大家可以很容易的实现。上文提到的平衡处理情况,很多书籍都有。

 

最后更新:2017-04-02 05:21:05

  上一篇:go magento 开发--另一种方式用xml来布局
  下一篇:go magento 1.4-- 1.3时代常用插件兼容性测试