我在理解如何在BST中实现删除操作时遇到了一些麻烦。我可以轻松实现A
和find()
并了解发生了什么,但是在删除时遇到了麻烦。
据我所知,删除过程涉及更新我们要删除的节点的父对象,即右引用或左引用(视情况而定),以引用null或要删除的节点的子对象(当要删除的节点有一个时)子级),或以其顺序后继者替换(当要删除的节点有2个子级时)。
我看到的大多数实现都像Java one here。似乎以不需要显式父引用的方式使用递归。我认为这是我一直感到困惑的地方。
任何人都可以解释这里的递归调用如何工作以及如何实现吗?
答案 0 :(得分:0)
在该链接中,重复性用于查找关键字,同时保留对父节点的引用,因为它返回将替换将要删除的节点的相关节点。它还会“删除”其使用的节点,以通过重复操作替换原始节点,从而避免重复。
希望这会有所帮助