任意のツリー(バイナリツリーではない)が与えられると、各ノードは整数とラベル付けされます。 ツリー内でn個の最大ノードを見つけるにはどうすればよいですか? ツリーに{43,253,48,62,91,641}が含まれ、3つの最大ノードが要求された場合、アルゴリズムは< 641,253,91>を返す必要があります。任意のツリー内でn個の最大ノードを見つける
すべてのC++(または任意の言語)の標準ライブラリ関数/データ構造が許可されています。 スペースが一定である限り、ノードにフィールドを追加することもできます。同様に、各ノードに最大の子を指すようにフィールドを追加できますが、すべての子をソート順に格納するArrayListを持つことはできません。
新しいプログラマーとして、私はこの質問に数日を費やしました。単純なグラフ検索アルゴリズム(BFS、DFS)は機能し、実装が簡単ですが、ツリー全体で網羅的な検索を行っているため、高速ではありません。
この問題を解決するにはどうすればよいですか?
ツリーが任意の場合は、おそらくすべてのノードを検索してn個の最大ノードを検索する必要があります。 – Cuber
@BeLikeJo:各ノードに最大の子を指すようにフィールドを追加することは、ノードの数に対して線形であることに注意してください。すべての子を順番に格納するためのarraylistを追加することは、ノードの数に線形です。だから、あなたの制限( "一定のスペースの使用")は少し奇妙です。私はまた、そのようなフィールドはどちらもあなたの問題を解決しないことに気付くでしょう。任意のツリーは単なるツリーになり、すべてのノードに当ることなくトラバースすることは不可能です。私は、各ノードがツリーと無関係な子ノードを持つことを止めるものはないと考えています。そのため、実際には2つのツリー(そのうちの1つはバイナリ)で作業しています。 – Brian