我有一个由二叉树组成的堆。它不是一个数组。我想知道如何对此进行排序。我知道我需要把最后一个节点放在根节点并做一个下堆泡沫。这部分我有。我遇到的问题是知道如何获得新的最后一个节点。是否有算法来查找最后一个节点?我是否需要跟踪每个节点上的每个父节点?
感谢。
答案 0 :(得分:2)
假设您开始使用的树是一棵完整的树,我会看看您是否可以跟踪每个节点的高度。
然后,当您遍历树中寻找要删除的下一个子项时,请在每个节点上进行检查。如果L.h> R.h向左走,否则向右走。 我对这个想法唯一的警告是,这意味着当你采取该节点时,你需要更新所有的高度。其中增加了O(log n)的成本。但是,既然你正在沿着树(这是theta(log n))走下去,那么渐渐没有太大的交易。