![]() |
1
1
我不能给你任何代码,但你要找的是一个“旋转”操作符。基本上,它处理“恼人的”删除情况——当您删除一个树,其中有两个孩子,他们都有两个孩子,例如根,但树中的任何其他节点。 Rotate所做的基本上是在一个非常局部的区域内,在涉及的节点之间交换子节点(我知道是受创伤的),这样子节点的顺序(左边越小,右边越大)就保持不变。它类似于优先级队列的“冒泡”功能。 这是维基百科( http://en.wikipedia.org/wiki/Tree_rotation 页。 希望这能让你走上正轨! 根据评论进行编辑: 对不起,我应该解释一下。当我说“树”时,我的意思是node,维基百科页面仍然有用。由于二进制搜索树的数学递归定义,您可以将每个节点视为其自己的子树,因此我的初始语句(保持不变)。但这只和你的问题有点关系,所以继续……:) |
![]() |
2
1
我的想法是,给你的根一个虚拟的父节点,一个不包含实际有用值的节点,但是根作为它的正确子节点。然后,每个可删除的节点现在都将拥有它们的父节点,并且根()将能够像其他节点一样被更均匀地处理。那么您就不需要特殊的方法来记住树是否也是空的。
编辑:如何
|
![]() |
Zevvysan · 为什么我的打印函数之一要删除节点? 7 年前 |
|
user9573040 · 递归二叉树高度 7 年前 |
![]() |
Dipesh Desai · 在二叉树haskell中搜索值 7 年前 |
![]() |
ibrahim · “main”已停止工作-C++[开发人员++] 7 年前 |