我正致力于在三元树中插入和删除节点时实现Java程序。
我能够毫无问题地实现插入,但我在实施删除操作时遇到了一些小问题。
所以,我的问题是:
如果节点有一个或多个子节点,如何从三元树中删除节点?
如果您可以共享任何逻辑或伪代码来实现"删除"那将会很棒。功能。
答案 0 :(得分:1)
我找到了解决方案。
假设n
是我们要删除的节点,l
是其左子节点,r
是其右子节点,m
是其中间子节点。
如果n
是 root 节点,请填写n
null
。
如果n
不是根节点,请检查m
是否null
。如果是这样,只需递归调用m
上的当前过程,因为m
匹配n
的值:我们将删除最后一个匹配的节点!
如果m
null
,那么我们会遇到以下情况:
如果l
和r
都是null
,那么在父节点中生成l
,r
和m
值n
为null
。
如果只有一个节点,例如x
,(l
或r
)不 {{ 1}},然后将null
非空值替换为x
的值,并删除n
。
如果x
和 l
不 r
,则找到节点null
在z
的左子树中使用最大值,并将n
的值替换为z
' s节点,并删除n
。