c - 树数据结构(level_order)

标签 c data-structures tree

我正在学习有关preorderpostorderinorderlevel_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/

相关文章:

c - GCC 将标准 header 与同名的个人 header 混淆

algorithm - 什么是对这些特征进行分组的良好数据结构?什么算法可以用于插入和检索?

JAVA - 为树数据结构创建一个迭代器,实现迭代器,并获取头节点

data-structures - 表的最佳数据结构

c++ - 无法遍历树 - 节点被重新遍历了很多次但仍然是非循环的

git - 获取最终分支列表(这是最终提示)

parsing - 左递归和右递归是否产生相同的解析树?

c++ - 错误 C2297 : '*' : illegal, 右操作数的类型为 'BYTE *'

c - 在c中制作一长串加密子字符串

c - 如何找到在命令行输入的双数的平均值?