二分木のデータ入力について
C言語についての質問です。
キューと再起関数を使って2分木にデータを入れようとしたところ、以下のようなエラーが発生いたしました。
ddd.c: 関数 ‘dequeue’ 内:
ddd.c:80:9: 警告: 戻りでポインタからキャスト無しに整数を作成しています [-Wint-conversion]
return x;
^
ddd.c: 関数 ‘growTree’ 内:
ddd.c:100:14: エラー: assignment to expression with array type
x->sentence = dequeue();
なんとか解消しようとするのですが、どうしてもエラーが増えるばかりで、うまくいきませんでした。
どの部分をどのように直せばいいのか大変お手数ですが、教えていただけると助かります。
よろしくお願いいたします。
以下が実行したプログラムになっております。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define QUEUE_SIZE 100 /*キューの大きさ*/
/*配列でキューを表現する*/
int front, rear;
char queue[3][50] = {"0b", "Ab", "Bb"};
char dequeue();/*キューからデータを取り出す*/
int next(int val);/*キューを配列で表現するとき、現在の次の配列のindexを返す*/
struct node{
char sentence[50];//値
struct node *left; //次のセルへのポインタ(左の子)
struct node *right; //次のセルへのポインタ(右の子)
};
int Gcount=0;
void error(char *s);/*エラーを出力する*/
struct node* make_node();/*nodeをつくって返す*/
//void set_value_of_node(struct node* node,int a);/*nodeに値をセットする*/
struct node* growTree(int i, int k);/*深さiまで木を成長させ、そのルートを返す*/
void displayTree(struct node *node);/*node以下の部分木を表示する*/
int main(void){
struct node *root;
int total=2 ;
front = 0;
rear = front + total + 1;
root=growTree(total, 0);
printf("\n\n\n前 順 表 示\n");
displayTree(root);
return 0;
}
struct node* make_node(){/*nodeをつくって返す*/
struct node *p;
if((p=(struct node*)malloc(sizeof(struct node ))) == NULL)
error("メモリが足りません\n");
p->left =NULL;
p->right =NULL;
return(p);
}
//id set_value_of_node(struct node* node, int a)/*nodeに値をセットする*/
//
//f(node == NULL)error("nodeが空です\n");
//ode->value=a;
//rintf("%d ", node->value);
//
//
void error(char *s){/*エラーを出力する*/
fprintf(stderr, s);
exit(1);
}
/*キューからデータを取り出す*/
char dequeue(){
char *x;
if(front == rear){
error("\nqueue is empty!!\n");
}
x = queue[front];
front = next(front);
return x;
}
/*キューを配列で表現するとき、現在の次の配列のindexを返す*/
int next(int val){
int next;
next=(val+1)%QUEUE_SIZE;
return(next);
}
struct node* growTree(int i, int k){/*深さiまで木を成長させ、そのルートを返す*/
/*課題1はここを書く*/
if(i == k) return NULL;
k++;
struct node *x;
x = make_node();
x->sentence = dequeue();
x->left = growTree(i, k);
x->right = growTree(i, k);
return x;
}
void displayTree(struct node *node){/*node以下の部分木を表示する*/
/*課題2はここを書く*/
if(node == NULL) return;
printf("%s\n", node->sentence);
displayTree(node->left);
displayTree(node->right);
}