我一直被困在处理AVL树的编码任务的这一部分。我们应该从AVL树中删除成员。我已经能够处理从树上移除叶子的所有其他情况。我的问题是在删除树的头叶(或父?)时该怎么做。
为了简单起见,我试图从树中删除B.在我的班级结构中,我可以访问父级和左右子级。
B
/ \
A C
我有一个计算前驱的方法,在这种情况下是A。节点是要删除的节点(B)从那里,我正在尝试此代码,但不断获得段错误。这遵循我用来删除树中其他叶子的一般代码。
successor->right = node->right;
node->right->parent = successor;
successor->parent = NULL;
node = NULL;
delete node;
答案 0 :(得分:0)
首先,以下两行在您编写它们的顺序中没有多大意义:
node = NULL;
delete node;
删除NULL是一项无操作。您可能打算切换这些线。至于你的段错误,我发布的代码中没有任何内容会导致崩溃;它可能发生在代码的其他地方。
对于AVL删除,有许多有用的教程。 AVL树上的Wikipedia page包含有关如何处理删除的逐步步骤。我也很喜欢阅读Eternally Confuzzled上的教程。还有更多,谷歌将出现。另外,如果您有文本,请查阅您的文本。