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]を達成するのは不可能に見えますが、他の人の提案を聞きたいです。