编辑代码

#include <stdio.h>
#include <stdlib.h>

// 二叉树节点结构
typedef struct TreeNode {
    int data;
    struct TreeNode *left;
    struct TreeNode *right;
} TreeNode;

// 队列结构(数组模拟)
#define MAX_SIZE 100
typedef struct {
    TreeNode* data[MAX_SIZE];
    int front;
    int rear;
} Queue;

// 初始化队列
void initQueue(Queue *q) {
    q->front = 0;
    q->rear = 0;
}

// 判断队列是否为空
int isEmpty(Queue *q) {
    return q->front == q->rear;
}

// 入队
void enqueue(Queue *q, TreeNode *node) {
    if (q->rear < MAX_SIZE) {
        q->data[q->rear++] = node;
    } else {
        printf("队列已满!\n");
    }
}

// 出队
TreeNode* dequeue(Queue *q) {
    if (!isEmpty(q)) {
        return q->data[q->front++];
    }
    printf("队列为空!\n");
    return NULL;
}

// 按层遍历二叉树
void levelOrderTraversal(TreeNode *root) {
    if (!root) {
        printf("空树!\n");
        return;
    }

    Queue q;
    initQueue(&q);
    enqueue(&q, root);

    while (!isEmpty(&q)) {
        TreeNode *current = dequeue(&q);
        printf("%d ", current->data);

        if (current->left) enqueue(&q, current->left);
        if (current->right) enqueue(&q, current->right);
    }
    printf("\n");
}

// 计算二叉树深度
int treeDepth(TreeNode *root) {
    if (!root) return 0;
    int left = treeDepth(root->left);
    int right = treeDepth(root->right);
    return (left > right ? left : right) + 1;
}

// 创建示例树
TreeNode* createSampleTree() {
    // 构建树:
    //        1
    //      /   \
    //     2     3
    //    / \   /
    //   4  5 6
    TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
    root->data = 1;
    
    root->left = (TreeNode*)malloc(sizeof(TreeNode));
    root->left->data = 2;
    
    root->right = (TreeNode*)malloc(sizeof(TreeNode));
    root->right->data = 3;
    
    root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
    root->left->left->data = 4;
    root->left->left->left = root->left->left->right = NULL;
    
    root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
    root->left->right->data = 5;
    root->left->right->left = root->left->right->right = NULL;
    
    root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
    root->right->left->data = 6;
    root->right->left->left = root->right->left->right = NULL;
    
    root->right->right = NULL;
    
    return root;
}

// 释放二叉树内存
void freeTree(TreeNode *root) {
    if (!root) return;
    freeTree(root->left);
    freeTree(root->right);
    free(root);
}

int main() {
    TreeNode *root = createSampleTree();
    
    printf("按层遍历结果: ");
    levelOrderTraversal(root);  // 输出:1 2 3 4 5 6
    
    printf("二叉树深度: %d\n", treeDepth(root));  // 输出:3
    
    freeTree(root);
    return 0;
}