在BST中删除节点的思路如下:
如果该节点没有子节点,则删除该节点并将其父节点的指针更新为null
如果该节点有一个子节点,则用其子节点替换该节点,并更新该节点父节点的指针为其子节点
如果该节点有两个子节点,则找到该节点的前驱,用前驱替换它,并将前驱的父节点指针更新为其唯一的子节点(只能是左子节点)
在某些情况下,也可以使用后继来完成最后一种情况!
据说,如果我们在某些情况下使用前驱,在其他情况下使用后继(给它们相等的优先级),我们可以获得更好的实际性能,
现在的问题是,如何做到这一点?基于什么策略?它如何影响性能?(我想他们的意思是时间复杂度)
我认为我们必须选择前驱或后继来使树更加平衡!但我不知道该选择哪一个!
一种解决方法是随机选择其中之一(公平随机),但是否更好地基于树结构制定策略?但问题是何时选择哪个?