二叉树层次建树(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,验证了二叉树层次建树的正确性。