0
点赞
收藏
分享

微信扫一扫

二叉树层次建树

二叉树层次建树(Level Order Tree Construction)是一种通过遍历给定的节点值序列,构建二叉树的方法。它按照从上到下、从左到右的顺序逐层构建节点,并按照给定的节点值与特定规则将节点插入到二叉树中。 下面是一个简单的二叉树层次建树的C语言例子:

#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));
    if (newNode == NULL) {
        printf("内存分配失败!\n");
        exit(1);
    }
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 层次建树
Node* levelOrderTreeConstruction(int arr[], int n) {
    Node* root = createNode(arr[0]);
    Node* queue[n];
    queue[0] = root;
    int i = 1;
    int front = 0;
    int rear = 0;

    while (i < n) {
        Node* newNode = createNode(arr[i]);
        queue[++rear] = newNode;
        if (queue[front]->left == NULL) {
            queue[front]->left = newNode;
        } else {
            queue[front]->right = newNode;
            front++;
        }
        i++;
    }
    return root;
}

// 前序遍历
void preOrderTraversal(Node* root) {
    if (root != NULL) {
        printf("%d ", root->data);
        preOrderTraversal(root->left);
        preOrderTraversal(root->right);
    }
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    Node* root = levelOrderTreeConstruction(arr, n);

    printf("前序遍历结果:");
    preOrderTraversal(root);

    return 0;
}

在这个例子中,我们首先定义了一个二叉树节点的结构体。然后使用createNode函数创建一个新节点,并为其分配内存。levelOrderTreeConstruction函数实现了层次建树的逻辑,它使用一个队列实现层次遍历的过程,逐个将给定的节点值插入到二叉树中。preOrderTraversal函数实现了前序遍历的逻辑,用来验证层次建树的结果。 在main函数中,我们定义了一个整数数组arr,它包含了待插入到二叉树中的节点值。然后通过计算元素个数,调用levelOrderTreeConstruction函数构建二叉树,并通过调用preOrderTraversal函数输出前序遍历结果。 以数组{1, 2, 3, 4, 5, 6, 7}为例,它表示要构建的二叉树的节点值序列。经过层次建树的过程,最终得到的二叉树如下所示:

1
   / \
  2   3
 / \ / \
4  5 6  7

输出的前序遍历结果为:1 2 4 5 3 6 7,验证了二叉树层次建树的正确性。

举报

相关推荐

0 条评论