从AVL树中删除父级

Remove Parent from AVL Tree

本文关键字:删除 AVL      更新时间:2023-10-16

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

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

   B
  / 
 A   C

我有一个计算前置项的方法,在这种情况下是a。Node是要删除的节点(B)从那里开始,我正在尝试这个代码,但不断得到segfault。这遵循了我用来移除树上其他叶子的通用代码。

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

首先,以下两行按照编写顺序没有多大意义:

node = NULL;
delete node;

删除NULL是一个无操作。你可能是想把这些台词改过来。至于你的segfault,我在你发布的代码中没有看到任何会导致崩溃的内容;它可能发生在代码的其他地方。

对于AVL删除有许多有用的教程。AVL Trees上的维基百科页面包含了如何处理删除的分步说明。我也很喜欢阅读关于永恒困惑的教程。还有很多,谷歌会发现。此外,如果你有文本,请查阅你的文本。