typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
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() {
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);
printf("二叉树深度: %d\n", treeDepth(root));
freeTree(root);
return 0;
}