在 BST 中找到每个级别的最大元素。?
[1] In O(n) time and O(1) space
[2] In O(logn) time and O(n) space
编辑:@Imposter 发布的解决方案适用于 [1] 这是 [1] 的解决方案
private int level = 0;
private int VisitedLevels = -1;
public void findLargestByLevel(AvlNode root)
{
if(root == null) return;
else
{
if(level > VisitedLevels)
{
System.out.println(root.data + " @ Level = " + level);
VisitedLevels++;
}
level++;
findLargestByLevel(root.right);
findLargestByLevel(root.left);
level--;
}
}
但我仍然无法为 [2] 找到解决方案
我想到的方法:如果我们对树进行预处理并将其展平,就像树的序列化一样,
100
50 200
20 75
#L0, 100, #L1, 50, 200, #L2, 20, 75, #L3
其中#L 是级别的标记:
那么我们可以在 O(1) 时间内轻松回答最高和最低级别的查询,此外,如果树被修改,我们可以在 LogN 时间内从序列化数据中执行插入和删除。请为 [2] 推荐某人,虽然在我看来 zit 看起来不可能实现 [2] 但我想听听其他人的建议