不了解这种二叉搜索树(BST)示例算法

时间:2011-04-12 19:58:09

标签: c++ data-structures binary-search-tree

来自here的删除代码。

我不明白删除代码的第一个片段(节点没有两个孩子)。

如果被删除的节点本身有父节点和子节点(即节点有一个子节点),这是如何工作的?

代码只是删除节点而不是将父指针设置为现在的孤儿。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我可能错了,但引用网站上的代码似乎没问题。不过,我还没有测试过它。

这是事实,因为delete函数接受一个BSTNode **节点类型的参数。这不是指向节点的指针。这是指向节点本身的父节点指针的指针 。这可能有点草率,但我必须承认,在意识到代码的作用后,它是一种优雅的解决方案。因此,当您重写(* node)时,您不会重写节点本身,而是重写节点的父节点指向节点的指针。实际上,代码以略微变态的方式执行您的建议:D。希望你明白我的意思,我希望我做对了。

我还建议您进一步阅读有关红黑树的内容,因为本文仅提供创建树的见解,但所描述的结构没有其高度的渐近边界。如果,例如你在这个结构中推送排序值,它将是一个连接列表而不是平衡树。