dz_1997 2017-11-18 14:18 采纳率: 0%
浏览 717

数据结构huffman编码树问题

以下是用于将树节点按权值插入forest数组的函数(权值小的在前),在调试中发现插入函数有问题,但编译器未报错。求大神指点,谢谢。
void insert(huffnode* temp)
{
curr=0;
if(size==0)
{
nodearray[curr]=temp;
size++;
}
else
{
while(temp->getweight()>=nodearray[curr]->getweight())
{
curr++;
}

        for(int i=size;i>curr;i--)
        {
            nodearray[i]=nodearray[i-1];
        }
        nodearray[curr]=temp;
        delete temp;
        size++;
    }
}

以下为调试时的代码

#include
#include
using namespace std;

class huffnode
{
private:
int weight;
char it='#';
huffnode* lc;
huffnode* rc;
public:
huffnode(char _it,int _weight)
{
it=_it;weight=_weight;lc=NULL;rc=NULL;
}
huffnode(huffnode* _lc,huffnode* _rc)
{
lc=_lc;rc=_rc;
weight=lc->getweight()+rc->getweight();
}
int getweight(){return weight;}
bool isleaf()
{
if(it=='#')
return false;
else
return true;
}
huffnode* getlc(){return lc;}
huffnode* getrc(){return rc;}
char getit(){return it;}
};

class hufftree
{
private:
huffnode* root;
public:
hufftree(huffnode* rt)
{
root=rt;
}
huffnode* getroot(){return root;}

};

void inorder(huffnode* rt)
{
if(rt!=NULL)
{
inorder(rt->getlc());
cout<getit();
inorder(rt->getrc());

}

}

class forest
{
private:
int size;
int curr;
int maxsize;
huffnode** nodearray;
public:
forest(int m)
{
size=0;curr=0;maxsize=m;nodearray=new huffnode*[maxsize];
}
void insert(huffnode* temp)
{
curr=0;
if(size==0)
{
nodearray[curr]=temp;
size++;
}
else
{
while(temp->getweight()>=nodearray[curr]->getweight())
{
curr++;
}

        for(int i=size;i>curr;i--)
        {
            nodearray[i]=nodearray[i-1];
        }
        nodearray[curr]=temp;
        delete temp;
        size++;
    }
}

huffnode* remove()
{
    huffnode* temp;
    temp=nodearray[0];
    for(int i=0;i<size-1;i++)
    {
        nodearray[i]=nodearray[i+1];
    }
    size--;
    return temp;
}

huffnode* makehuff()
{
    while(size!=1)
    {
        huffnode* temp1;
        huffnode* temp2;
        temp1=remove();
        temp2=remove();
        huffnode* temp3= new huffnode(temp1,temp2);
        insert(temp3);
    }
    return nodearray[0];
}

huffnode** getarray()
{
    return nodearray;
}

};

int main()
{
int n;
cin>>n;
forest f(n);
string _f[n];
for(int i=0;i {
char it;
int weight;
cin>>it>>weight;
//huffnode tempnode(it,weight);
f.insert(new huffnode(it,weight));
_f[i]=it;
cout<<_f[i];
}

cout<<endl;

for(int i=0;i<n;i++)
{
    cout<<f.getarray()[i]->getit()<<f.getarray()[i]->getweight();

}

return 1;

}

  • 写回答

1条回答 默认 最新

  • $(X) 2018-07-17 15:24
    关注

    nodearray[curr]=temp;
    delete temp;
    //此时nodearray[curr]是悬挂指针

    评论

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗