首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

请问一个AVL树的删除有关问题

2013-01-07 
请教一个AVL树的删除问题?这几天没事复习了一下数据结构,把以前没有实现的代码又从头自己实现了一遍,但是

请教一个AVL树的删除问题?
    这几天没事复习了一下数据结构,把以前没有实现的代码又从头自己实现了一遍,但是搞到AVL树那边遇到了各种困难,一开始是插入操作,各种旋转,最后好不容易解决了。。但是到了删除又遇到困难了。
    首先我先说下我得删除思路吧:
先根据关键字找到待删除的节点,记为current。
然后判断current是否有左子树,有就找到左子树最大值节点max(注意max既然是最大值节点,那么它的右子树一定为空,左子树有可能为空),然后将current的数据和max的数据做交换,再将current指向max节点,
否则判断current是否有右子树,有就找到右子树的最小值节点min(同理最小值节点min的左子树一定为空,右子树可能为空),然后将current的数据和min的数据做交换,再将current指向min节点。
现在问题归结于删除current节点即可,current为叶节点或者只有一个子树的节点,下面的删除操作遇到了困难,如何在删除后回朔判断删除路径上的所有节点的平衡因子?
[解决办法]
>current为叶节点
那就直接删
>只有一个子树的节点
上面两个只要做一个就可以了。所以只有一个子树,上面那个逻辑依然能做。

别忘了最后还要重新平衡。

热点排行