ハフマン ツリーを格納する効率的な方法に関する私の質問に関連するフォローアップの質問として、(ハフマン コーディング出力に基づいて) バイナリ ツリーを検索し、特定のノードへのパスを格納する最速かつ最も効率的な方法は何かと考えていました。 .
これは私が現在持っているものです:
- ルートノードをキューに追加
- キューが空でない間、アイテムをキューからポップします
- それが私たちが探しているものかどうかを確認してください
- yes: ヘッド ポインターをたどってルート ノードに戻ります。各ノードにアクセスして、左か右かを確認し、メモします。
- 検索から抜け出す
- 左右のノードをキューに入れる
- それが私たちが探しているものかどうかを確認してください
これはハフマン木なので、探しているすべてのエントリが存在します。上記は幅優先検索です。これは、ソース内にあるアイテムがツリーの上位にあることが多いため、ハフマン ツリーに最適であると考えられていますが、追跡する良い方法がわかりません。ノードに配置したヘッド ポインターを使用して、バックトラックせずに特定のノードに到達する方法。
この場合、右/左のすべてのパスも逆の順序で取得しています。たとえば、頭をルートにたどると、ルートから右、左、左、左になることがわかります。 、 左右。または、効率的な方法で 100 を取得することを探している場合は、バイナリで 001。
ルートからノードへのパスをノード内の別の値として保存することも提案されましたが、その目的のために作成した変数が保持できるビット数よりも大きなツリーがあった場合、これは失敗します。データを格納するポイントも大量のメモリを占有します。