C++ 通过无序变量删除二叉搜索树

C++ Binary Search Tree Deletion by unordered variable

本文关键字:搜索树 删除 变量 无序 C++      更新时间:2023-10-16

我有一个按名称排序的二叉搜索树,但我试图删除所有分数低于 50 的学生。我遇到了困难,因为树不是按分数排序的,而是按名称排序的,但我需要按分数删除。我不能为上帝的生活似乎能够合并遍历+节点删除而不会出错,或者它显然不起作用。有人能把我引向正确的方向吗?我找不到他们通过树未排序的变量删除的任何线程,也无法在线找到任何线程。

谢谢。

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

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

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

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