从AVL树中删除Parent

时间:2013-12-04 00:14:24

标签: c++ data-structures avl-tree

我一直被困在处理AVL树的编码任务的这一部分。我们应该从AVL树中删除成员。我已经能够处理从树上移除叶子的所有其他情况。我的问题是在删除树的头叶(或父?)时该怎么做。

为了简单起见,我试图从树中删除B.在我的班级结构中,我可以访问父级和左右子级。

   B
  / \
 A   C

我有一个计算前驱的方法,在这种情况下是A。节点是要删除的节点(B)从那里,我正在尝试此代码,但不断获得段错误。这遵循我用来删除树中其他叶子的一般代码。

successor->right = node->right;
node->right->parent = successor;
successor->parent = NULL;
node = NULL;
delete node;

1 个答案:

答案 0 :(得分:0)

首先,以下两行在您编写它们的顺序中没有多大意义:

node = NULL;
delete node;

删除NULL是一项无操作。您可能打算切换这些线。至于你的段错误,我发布的代码中没有任何内容会导致崩溃;它可能发生在代码的其他地方。

对于AVL删除,有许多有用的教程。 AVL树上的Wikipedia page包含有关如何处理删除的逐步步骤。我也很喜欢阅读Eternally Confuzzled上的教程。还有更多,谷歌将出现。另外,如果您有文本,请查阅您的文本。