1

整数と文字を含むノードのバイナリ ツリーがあります。私はハフマンコーディングに取り組んでおり、ノードのバイナリプレゼンテーションを取得したいと考えています。左に分岐するたびに文字列に「0」が追加され、右に分岐するたびに「1」が追加されます。

文字を検索することを考えていますが、その分岐を追跡します。それが左側のノードにない場合は、文字列に追加された最後の「0」を削除し、戻って右側を確認します。これは非常に面倒に見えます。ノードを追跡する別の方法はありますか?

編集:バイナリ ツリーを使用する必要があります。

4

2 に答える 2

2

スタック データ構造のように聞こえます。

次のようにスタックを使用して、ツリー内のどこにいるかを追跡します。

  • パス =std::stack<int>
  • 親に移動 ==pop()
  • 左の子に移動 ==push(0)
  • 右の子に移動 ==push(1)

編集:

実際には、代わりにandを使用std::vector<int>したい場合があります。スタックのように動作しますが、ベクトルを使用すると、最後に 0 と 1 のリスト全体を取得できます。push_backpop_back

于 2013-03-27T18:23:30.233 に答える
2

ハフマン出力のエンコードについて話しているのですか?

可能な入力文字ごとに出力コードと長さのテーブルを作成する必要があります。入力文字ごとにツリーをトラバースしないでください。

于 2013-03-27T18:19:25.920 に答える