如何删除三元树中的节点?

时间:2014-03-11 21:56:40

标签: algorithm ternary-tree

我正致力于在三元树中插入和删除节点时实现Java程序。

我能够毫无问题地实现插入,但我在实施删除操作时遇到了一些小问题。

所以,我的问题是:

  

如果节点有一个或多个子节点,如何从三元树中删除节点?

如果您可以共享任何逻辑伪代码来实现"删除"那将会很棒。功能。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。


假设n是我们要删除的节点,l是其左子节点,r是其右子节点,m是其中间子节点。

  • 如果n root 节点,请填写n null

  • 如果n 不是根节点,请检查m 是否null 。如果是这样,只需递归调用m上的当前过程,因为m匹配n的值:我们将删除最后一个匹配的节点!

  • 如果m null ,那么我们会遇到以下情况:

    • 如果lr都是null,那么在父节点中生成lrmnnull

    • 如果只有一个节点,例如x,(lr {{ 1}},然后将null非空值替换为x的值,并删除n

    • 如果x l r,则找到节点nullz左子树中使用最大值,并将n的值替换为z ' s节点,并删除n