繁体   English   中英

BST的BFS遍历中的段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM