
作业社区
探索学习新天地,共享知识资源!
浪潮君 的学生作业:
#include #include // 定义二叉树节点结构 typedef struct TreeNode { char data; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 定义队列节点结构 typedef struct QueueNode { TreeNode *treeNode; struct QueueNode *next; } QueueNode; // 定义链式队列结构 typedef struct LinkQueue { QueueNode *front; QueueNode *rear; } LinkQueue; // 创建新的树节点 TreeNode* createTreeNode(char data) { TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode)); node->data = data; node->left = NULL; node->right = NULL; return node; } // 创建空的链式队列 LinkQueue* createEmptyLinkQueue() { LinkQueue *q = (LinkQueue*)malloc(sizeof(LinkQueue)); q->front = NULL; q->rear = NULL; return q; } // 判断队列是否为空 int isEmptyLinkQueue(LinkQueue *q) { return q->front == NULL; } // 入队操作 void enterLinkQueue(LinkQueue *q, TreeNode *node) { QueueNode *newNode = (QueueNode*)malloc(sizeof(QueueNode)); newNode->treeNode = node; newNode->next = NULL; if (isEmptyLinkQueue(q)) { q->front = newNode; q->rear = newNode; } else { q->rear->next = newNode; q->rear = newNode; } } // 出队操作 TreeNode* deleteLinkQueue(LinkQueue *q) { if (isEmptyLinkQueue(q)) { return NULL; } QueueNode *temp = q->front; TreeNode *node = temp->treeNode; q->front = q->front->next; if (q->front == NULL) { q->rear = NULL; } free(temp); return node; } // 层次遍历函数 void levelOrderTraversal(TreeNode *root) { if (root == NULL) return; LinkQueue *q = createEmptyLinkQueue(); enterLinkQueue(q, root); while (!isEmptyLinkQueue(q)) { TreeNode *temp = deleteLinkQueue(q); printf("%c ", temp->data); if (temp->left != NULL) { enterLinkQueue(q, temp->left); } if (temp->right != NULL) { enterLinkQueue(q, temp->right); } } free(q); } // 主函数,构建二叉树并调用层次遍历 int main() { // 构建二叉树 TreeNode *root = createTreeNode('A'); root->left = createTreeNode('B'); root->right = createTreeNode('C'); root->left->left = createTreeNode('D'); root->left->right = createTreeNode('E'); root->right->right = createTreeNode('F'); // 调用层次遍历函数 levelOrderTraversal(root); printf("\n"); return 0; } 运行结果:A B C D E F




