平衡二叉树删除某个节点的方法

  1. 确认违规节点的位置

             首先我们找到待删除的节点Z,如果节点Z的两个孩子均为空,那么将其父节点中对应指向Z的指针置为空,然后删除节点Z。如果节点Z仅有一个孩子,那么将Z节点的父节点中指向Z的指针指向Z仅有的孩子,然后删除节点Z。如果节点Z有两个非空的子节点,那么找到节点Z的中序后继节点Y(即右子树的最左节点),将节点Y的Key值覆盖节点Z的Key值,此时节点Y的两个孩子均为空或者只有一个右孩子,将节点Y的右指针里的值覆盖其父节点中指向Y的指针,然后删除节点Y。综上所述,删除的节点要么是节点Z本身要么是节点Z的中序后继节点Y。我们现在将它们统一命名为X,假若节点X是一个左孩子就对其父节点P的平衡因子进行减1操作,否则对节点P的平衡因子进行加1操作。如果节点P的平衡因子的绝对值超出了1,那么节点P即为违规节点,如果P的平衡因子为0,此时表示P的树高减小了1,这会对上层的节点的平衡因子造成影响(如附图),此时根据P是一个左孩子还是右孩子对其父节点的平衡因子进行修改。如果P的平衡因子的绝对值为1,那么表示原来等高的两颗子树,现在其中一颗子树高度减1了,这节点P的树高并没有影响,此时不需要对平衡二叉树进行调整。Bf表示平衡因子。下面是上述判断的示意图:

《平衡二叉树删除某个节点的方法》

            判断节点P的平衡因子的绝对值是否为1,若是则不需要调整树形结构,否则进行调整。

附图:

《平衡二叉树删除某个节点的方法》

           此时删除红色节点会对树根的平衡因子产生影响。

           2.调整二叉树使之平衡  

                与平衡二叉树节点插入的调整方法相同,详见《平衡二叉树插入某个节点的方法》博文,不再赘述。

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/u011583439/article/details/11798687
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞