2012-07-24 101 views
0

看来我的代码为huffman编码程序创建二叉树是有缺陷的。我无法弄清楚为什么,但是当我检查调试器中的根节点时,左节点指向字母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功能工作。

+0

为什么不使用std :: map呢? – 2012-07-24 20:27:21

+0

@ManofOneWay怎么样? (对不起,我是编程新手) – 2012-07-24 20:29:04

+0

std :: map被实现为一个排序后的二叉树:http://en.cppreference.com/w/cpp/container/map – 2012-07-24 20:29:47

回答

1

在循环结束时,您做了delete p,它使指针无效并释放刚刚插入的节点。