严蔚敏版本的 数据结构中 的二叉排序树中 删除节点 时 重接 Q的左右子树 的方法为何 有选择语句?

就是这张图片中下面画线的部分,为什么要用一个if else选择呢?
2025-02-25 00:53:25
推荐回答(2个)
回答1:

在点p的左右子树同时存在时,程序要用左子树中的最大的元素,即p的左子树中最右边的元素替代p。while循环的用途就是找到这个最右边的元素。但是这个元素可能是p的左孩子本身,即p的左孩子没有右子树。这种情况下,q与p均指向需要删除的节点,这个结点已经复制了其左孩子s的值,所以删除节点s即可。照片中第一行红线处理的是p的左孩子有右子树的情况,而第二行处理的是没有右子树的情况。

回答2:

因为有可能该删除的节点下面的左子树没有右子树的情况。如下(其中O是待删除的节点,O 下面有左右子树L、R,但L下面没有右子树,这种情况下,直接把L的左子树,也就是A提上来即可)

--------------------根
------------------/-----\
----------------O-------X
---------------/----\
-------------L-------R
----------/
--------A