[英]seg fault in BFS traversal of BST
我已经实现了一个二叉树及其BFS遍历。 该程序如下:
struct elemq{
int ele;
struct elemq *left;
struct elemq *right;
};
struct que{
struct elemq *ss;
struct que *next;
};
void qinsert(struct elemq *ptr){
struct que *node;
node = (struct que *)malloc(sizeof(struct que));
if(front == NULL && rear == NULL){
node->ss = ptr;
node->next = NULL;
front = node;
rear = node;
}
else{
node->ss = ptr;
node->next = NULL;
rear->next = node;
rear = node;
}
}
struct elemq *qdelete(){
if(front == NULL && rear == NULL){
cout << "No elements to delete\n";
exit(0);
}
struct elemq *dd = front->ss;
struct que *ddd = front;
front = front->next;
free(ddd);
return dd;
}
int isempty(){
if(front == NULL && rear == NULL){
return 1;
}
else{
return 0;
}
}
void bfs(){
qinsert(root);
struct elemq *fff;
while(!isempty()){
fff = qdelete();
cout << fff->ele << "\n";
if(fff->left != NULL){
qinsert(fff->left);
}
if(fff->right != NULL){
qinsert(fff->right);
}
}
}
虽然代码很长,但很容易理解。 elemq结构是树中节点的结构。 que是我用来实现bfs的队列。 q insert是将元素插入队列,qdelete删除队列中的元素。 isempty()用于检查队列是否为空。 程序显示根元素,然后给出分段错误。 请帮忙。 挣扎了很长时间。
如果队列中只有一个元素,则qdelete
函数将无法正常工作:
struct elemq *qdelete(){
if(front == NULL && rear == NULL){
cout << "No elements to delete\n";
exit(0);
}
struct elemq *dd = front->ss;
struct que *ddd = front;
front = front->next;
free(ddd);
return dd;
}
在这种情况下, front
设置为NULL
,但是rear
仍然指向现在free
d内存。
添加一个
if (front == rear) {
struct elemq *dd = front->ss;
free(front);
front = rear = NULL;
} else {
// what you have
}
要解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.