搜索并删除BST的前任(或后继)

时间:2019-05-11 15:14:56

标签: c data-structures binary-search-tree abstract-data-type

如何从二叉搜索树中递归地删除给定数据的前任(或后继)?数据可以包含在树中,也可以不包含在树中。

该函数应返回存储在前任(或后继)节点中的密钥。

1 个答案:

答案 0 :(得分:0)

假设您要删除包含最大值小于某个目标值 t 的节点,其中 t 本身不一定是树中任何节点的值,请考虑通过在BST中搜索值 t 可获得的结果。有三种可能性:

  1. 您找到 t 。归结为your previous question -您只需要执行与在这种情况下相同的跟踪即可。
  2. 您到达的节点 N 的值大于 t ,并且没有左子节点。在这种情况下,树不包含 t t 值之间的任何值 N 。因此,如果要删除的是 N 的前身,那么它又可以归结为上一个问题的情况。
  3. 您到达的节点 M 的值小于 t ,并且没有合适的子节点。在这种情况下,树不包含 t M < em> t ,因此 M 本身就是要删除的节点。