here的删除代码中。

我不了解删除代码的第一个摘要(该节点没有两个 child )。

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

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

我想念什么吗?

最佳答案

我可能是错的,但是引用站点上的代码似乎还可以。我还没有测试过。

这是正确的,因为delete函数采用一个BSTNode **节点类型的参数。这不是指向节点的指针。这是指向父节点的节点的指针,指向节点本身。这可能有点草率,但是我必须承认在意识到代码的作用之后,这是一种优雅的解决方案。因此,当您重写(* node)时,您不是在重写节点本身,而是在重写节点的父节点指向该节点的指针。有效地,代码以一种稍微变态的方式执行了您建议的操作:D。希望您理解我的意思,希望我理解正确。

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

关于c++ - 不了解此二进制搜索树(BST)示例算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5640881/

10-10 18:02