二进制搜索树删除而无需复制
Binary Search Tree deletion without copying
编程简单的二进制搜索树数据结构(非自我平衡)时,最多的资源在用两个孩子删除节点时给出的建议是将数据复制在一个左边之一中孩子到正在删除的节点。这是不好的做法吗?某种指针操纵是否会提供更快的结果?是否有BST旋转算法可以推广此?
是的,您不想复制节点,您只想"移动"它(即,在周围更改指针)将其放入您的位置删除。如果您不想保持平衡,那么您实际上不需要进行任何形式的旋转 - 您只需在左子树中选择最正确的节点(或右Sub sub sub sub的最左侧节点-树)。您可以从当前位置删除该位置,然后将其插入您需要删除的节点的位置(严格通过操纵指针)。
复制数据具有O(1)复杂性与可能的O(n)操作时可能的O(n):源节点(源节点(左子树中的最右节点或左图中最右节点)右子树中的节点可能有一个孩子和一个子树。与单个节点插入不同,在这种情况下,需要合并子树。为了避免复制开销,应该将指针存储到bst中的对象而不是对象。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 使用C++创建特殊的二叉搜索树
- 在递归二叉搜索树中搜索
- 在二叉搜索树中插入时出现分段错误
- C++二叉搜索树模板从函数返回节点
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 在二叉搜索树C++中计算平均值
- 在字符串的二叉搜索树中搜索子字符串 - C++
- 在二叉搜索树中插入新元素
- 如何打印在二叉搜索树中找到的数据?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 这是一个二叉搜索树吗?黑客排名问题
- 是否可以仅通过传递指针作为参数来复制二叉搜索树?
- 二叉搜索树 深度复制和取消引用
- 为什么我的原始二叉搜索树被修改,即使我在另一个节点中复制了根节点
- 二进制搜索树 - 将一棵树复制到另一棵树中
- 从C++中的二进制搜索树(递归)复制叶
- 二进制搜索树删除而无需复制
- 二叉搜索树的复制构造函数被无限调用