我正在学习有关preorder
、postorder
、inorder
和level_order
的树数据结构。这些代码是由C编写的。当我在dequeue方法中将temp -> item
分配给element item时,出现错误。但我认为 struct
指针可以保存另一个 struct
指针!我该如何解决它
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct QueueNode {
int item;
struct QueueNode *link;
} QueueNode;
typedef struct {
QueueNode *front, *rear;
} QueueType;
typedef struct TreeNode {
int data;
struct TreeNode *left, *right;
} TreeNode;
typedef TreeNode * element;
void error(char *message)
{
fprintf(stderr,"%s\n",message);
exit(1);
}
void init(QueueType *q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType *q)
{
return (q->front==NULL);
}
int is_full(QueueType *q)
{
return 0;
}
void enqueue(QueueType *q, element item)
{
QueueNode *temp=(QueueNode *)malloc(sizeof(QueueNode));
if(temp == NULL )
error("error");
else {
temp->item = item;
temp->link = NULL;
if( is_empty(q) ){
q->front = temp;
q->rear = temp;
}
else {
q->rear->link = temp;
q->rear = temp;
}
}
}
element dequeue(QueueType *q)
{
QueueNode *temp = q -> front;
element item;
if( is_empty(q) )
error("error");
else {
item = temp->item;
q->front = q->front->link;
if( q->front == NULL )
q->rear = NULL;
free(temp);
return item;
}
}
void level_order(TreeNode *ptr)
{
QueueType q;
init(&q);
if( !ptr ) return;
enqueue(&q, ptr);
while(is_empty(&q)) {
ptr = dequeue(&q);
printf(" %d ", ptr->data);
if( ptr->left )
enqueue(&q, ptr->left);
if( ptr->right )
enqueue(&q, ptr->right);
}
}
TreeNode n1={1, NULL, NULL};
TreeNode n2={2, &n1, NULL};
TreeNode n3={4, NULL, NULL};
TreeNode n4={8, NULL, NULL};
TreeNode n5={10, NULL, NULL};
TreeNode n6={6, NULL, NULL};
TreeNode n7={9, &n4, &n5};
TreeNode n8={7, &n6, &n7};
TreeNode n9={3, &n2, &n3};
TreeNode n10={5, &n9, &n8};
TreeNode *root= &n10;
void main()
{
level_order(root);
}
最佳答案
在你的函数 dequeue
中,这个赋值 -
item = temp->item;
item
是指向结构 TreeNode
的指针,但是 temp->item
是一个整型变量。编译器显然会报错(并不知道你试图完成什么)。
关于c - 树数据结构(level_order),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34590377/