2011-08-07 9 views
-1
while(count != 25) { 
    tail = head; 
    new_node = (binary_node*)malloc(sizeof(binary_node)); 
    while(tail->next != NULL) 
     tail = tail->next; 
    tail->next = new_node; 
    new_node->element.frequency = (p->element.frequency + q->element.frequency); 
    new_node->LSON = p; 
    new_node->LSON->RTAG = 0; 
    new_node->RSON = q; 
    new_node->RSON->RTAG = 1; 
    head = new_node; 
    n = n - 1; 
    head = q->next; 
    sort(n, head); 


    p = head; 
    q = p->next; 
    count++; 
} 

上記のコードは、ハフマンツリーを生成するはずです。しかし、形成される二分木は正しくありません。文字を含むすべてのノードはリーフまたは息子のないノードである必要がありますが、一部のアルファベットノードにはまだ息子がいます。コードの何が間違っていますか?不正なバイナリツリー

+1

はこの宿題ですか? – erisco

+0

nope。私はクラスでそれをすることができないので、今私はハフマンツリーを作成しようとしています。 – shinshin32

+7

私は単一の変数宣言もコメントも表示されません。私はいくつかのタイプと意味を推測することができますが、ESPによるデバッグは楽しいものではありません。より完全なコードを表示し、意味のあるコメントを追加してください。 – abelenky

答えて

1

mallocは、ゴミでいっぱいのメモリ領域を返します。

new_nodeにアルファベットノードではないことを決して設定しなかったので、ガラベージが実際にアルファベットノードであることがわかります。

検証の結果:元々持っていたアルファベットノードが増えています。

+0

new_nodeの文字をアルファベットノードにしないように設定しようとしました。しかしそれはまだ同じです。まだアルファベットノードのように見えるが、右と左の息子を持つノードがある – shinshin32

関連する問題