如何解决我们可以在二进制搜索树中用其直接的子节点替换被删除的节点而不是用其有序的前任节点或后继节点代替吗?
我们知道要删除BST中的任何节点,我们将其删除的节点替换为其有序的前任或后继。
我尝试了一种新方法,在该方法中,将删除的节点替换为它的直接左子节点或它的直接右子节点(而不是用其有序的pred。或succ替换)。而且我认为这种方法对BST中的每个节点均有效。这种方法的程序也将很容易,因为节点的链接数量减少了。我附上2张图片,以使您理解我的方法。
我在BST中删除节点的方法是对还是错?如果不对,为什么?
解决方法
这可能会变得非常复杂,但是您可能需要研究一下旋转方式。
假设您有一棵具有5个级别的完整树,并且您正在尝试删除roots右子节点,该子节点包含更多的节点。问题在于,仅替换为左或右子代,将导致删除的索引“拥有”两个以上的子代,我确定您知道这是无效的BST。
解决方案?旋转!
这是几个图片解释的链接。
http://www.mathcs.emory.edu/~cheung/Courses/171/Syllabus/9-BinTree/BST-delete2.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。