
作業社區
探索學習新天地,共享知識資源!
浪潮君 的學生作業:
#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




