层序建立二叉树使用c语言实现
时间: 2024-12-03 11:15:45 浏览: 12
数据结构层序中序遍历构建二叉树
在C语言中,我们可以使用队列数据结构来实现层序(广度优先)创建二叉树。这里有一个简单的示例,假设我们已知一个整数数组`arr[]`,其中每个元素代表一个节点值,而空格或负数表示该位置不存在节点:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 创建一个新的节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->val = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层序遍历构造二叉树
Node* buildTreeFromLevelOrder(int arr[], int n) {
if (n <= 0 || !arr) return NULL;
// 初始化根节点
Node* root = createNode(arr[0]);
if (n == 1) return root; // 只有一个节点的情况
// 使用两个指针,一个指向当前层,一个指向下一层
int i = 1, nextLevelIndex = 1;
Node** nodes = (Node**)malloc((n - 1) * sizeof(Node*));
// 遍历每一层并构建节点
for (; i < n && nextLevelIndex < n; ++i) {
if (arr[i] != -1) { // 遇到节点值
nodes[nextLevelIndex++] = createNode(arr[i]);
if (nextLevelIndex % 2 == 0) { // 当前节点在左侧
root- 1];
}
}
}
free(nodes); // 释放临时节点数组
return root;
}
int main() {
int arr[] = {3, 9, 20, -1, -1, 15, 7, 18, -1, -1, 15};
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = buildTreeFromLevelOrder(arr, n);
// 打印或进一步处理二叉树...
// ...
return 0;
}
```
这个程序会使用给定的`arr`创建一个二叉树,并假定非负数值代表节点,负数值和空格表示没有节点。在主函数中,你可以选择合适的时机打印或继续操作构建好的二叉树。
阅读全文