二分木とその 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() は、キューが空かどうかを確認するためのものです。プログラムはルート要素を表示し、セグメンテーション違反を引き起こします。助けてください。かなり前から苦戦。