C ++二进制搜索树按无序变量删除

时间:2017-11-01 11:23:12

标签: c++ recursion data-structures binary-search-tree recursive-datastructures

我有一个名字的有序二进制搜索树,但我试图删除所有得分低于50的学生。我有困难,因为树没有按分数排序,而是按名称排序,但我需要按分数删除。我不能上帝的生活似乎能够结合遍历+节点删除而不会出错或它只是显然不工作。有人能指引我走向正确的方向吗?我找不到任何线程,他们通过变量删除树没有订购,也无法在网上找到。

谢谢。

1 个答案:

答案 0 :(得分:0)

这可能是最好的两次通过。在第一遍中,初始化一个空的节点列表。然后,对树进行顺序遍历并在列表中存储对每个需要删除的节点的引用。

在第二遍中,浏览您在第一遍中创建的列表,然后依次删除每个节点。

您也可以通过创建新树一次完成此操作。然后,对原始树执行inorder遍历,将分数大于或等于50的所有节点复制到新树。完成后,删除旧树。

一般来说,如果成绩低于50的学生很少,第一种方法会更快。但是,如果超过一半的学生得分低于50,那么第二种方法可能会更快。