来自here的删除代码。
我不明白删除代码的第一个片段(节点没有两个孩子)。
如果被删除的节点本身有父节点和子节点(即节点有一个子节点),这是如何工作的?
代码只是删除节点而不是将父指针设置为现在的孤儿。
我错过了什么吗?
答案 0 :(得分:1)
我可能错了,但引用网站上的代码似乎没问题。不过,我还没有测试过它。
这是事实,因为delete函数接受一个BSTNode **节点类型的参数。这不是指向节点的指针。这是指向节点本身的父节点指针的指针 。这可能有点草率,但我必须承认,在意识到代码的作用后,它是一种优雅的解决方案。因此,当您重写(* node)时,您不会重写节点本身,而是重写节点的父节点指向节点的指针。实际上,代码以略微变态的方式执行您的建议:D。希望你明白我的意思,我希望我做对了。
我还建议您进一步阅读有关红黑树的内容,因为本文仅提供创建树的见解,但所描述的结构没有其高度的渐近边界。如果,例如你在这个结构中推送排序值,它将是一个连接列表而不是平衡树。