0

ハフマン コーディング プログラムのバイナリ ツリーを作成するコードに問題があるようです。理由はわかりませんが、デバッガーでルート ノードを調べると、左側のノードは文字 N を指し、右側のノードは親ノードを指しています。親ノードの左側のノードは文字 N を指し、右側のノードは親ノードを指します。その親ノードの左の子は文字 N ですが、... (これがどこに向かっているかがわかります)。これは問題があるコードです:

huff_sort(nodes); // sort nodes by weight

    //-------BUILDING TREE------
    while(nodes->size() != 1){ //Sorts nodes by weight and then removes two of them and replaces them with one
        int w= (**beg).weight + (**(beg+1)).weight;
        Node* p = new Node;
        p->set_node(w, '*', *nodes->begin(), *(nodes->begin()+1)); //making it the parent node of the two lowest nodes
        nodes->erase(nodes->begin(), nodes->begin()+2);
        unsigned int i = 0;
        while(w > (*nodes)[i]->weight && i <= nodes->size()){ //finds where to insert the parent node based on weight
            i++;
        }
        if(i > nodes->size()) //if it needs to be inserted at the end
            nodes->push_back(p);
        else
            nodes->insert(nodes->begin()+i, p);
        delete p;
    }

以前のデバッグから、huff_sort 関数が機能することがわかっています。

4

1 に答える 1

1

ループの最後でdelete p、ポインタを無効にし、挿入したノードを解放します。

于 2012-07-25T07:04:58.807 に答える