层次遍历(广度)

下面是一个实现二叉树层次遍历的代码示例:

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

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

// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    return newNode;
}

// 层次遍历
void levelOrder(Node* root) {
    if (root == NULL) return;

    Node** queue = (Node**)malloc(100 * sizeof(Node*)); // 简单实现,固定大小
    int front = 0, rear = 0;

    queue[rear++] = root;

    while (front < rear) {
        Node* current = queue[front++];
        printf("%d ", current->data);

        if (current->left != NULL)
            queue[rear++] = current->left;
        if (current->right != NULL)
            queue[rear++] = current->right;
    }

    free(queue);
}

int main() {
    Node* root = NULL;
    root = createNode(1);
    root->left = createNode(2);
    root->right = createNode(3);
    root->left->left = createNode(4);
    root->left->right = createNode(5);

    printf("层次遍历: ");
    levelOrder(root);
    printf("\n");

    return 0;
}

这个代码实现了二叉树的层次遍历,使用简单的队列方法来保存待访问的节点

Last updated