二进制搜索树删除而无需复制

Binary Search Tree deletion without copying

本文关键字:复制 搜索树 删除 二进制      更新时间:2023-10-16

编程简单的二进制搜索树数据结构(非自我平衡)时,最多的资源在用两个孩子删除节点时给出的建议是将数据复制在一个左边之一中孩子到正在删除的节点。这是不好的做法吗?某种指针操纵是否会提供更快的结果?是否有BST旋转算法可以推广此?

是的,您不想复制节点,您只想"移动"它(即,在周围更改指针)将其放入您的位置删除。如果您不想保持平衡,那么您实际上不需要进行任何形式的旋转 - 您只需在左子树中选择最正确的节点(或右Sub sub sub sub的最左侧节点-树)。您可以从当前位置删除该位置,然后将其插入您需要删除的节点的位置(严格通过操纵指针)。

复制数据具有O(1)复杂性与可能的O(n)操作时可能的O(n):源节点(源节点(左子树中的最右节点或左图中最右节点)右子树中的节点可能有一个孩子和一个子树。与单个节点插入不同,在这种情况下,需要合并子树。为了避免复制开销,应该将指针存储到bst中的对象而不是对象。