用c语言编写,已知一个二叉树的层序遍历(包含null),创建该二叉树
时间: 2024-11-09 14:24:52 浏览: 14
C语言编程之完全二叉树的层序遍历
在C语言中,要从给定的层序遍历序列创建一棵二叉树,通常需要分两步操作:首先理解遍历顺序,然后根据顺序构建树结构。
层序遍历的顺序是:左->右->根,即每一层先访问所有左节点,再访问右节点,最后是根节点。对于每个非空元素,我们需要确定它在原数组中的位置以及其父节点的位置。
以下是一个简单的示例函数,用于基于层序遍历构建二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的树节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层级构造函数
TreeNode* buildTree(int* layerOrder, int n, int start, int end) {
if (start > end)
return NULL;
// 找到当前层的第一个节点
TreeNode* root = createNode(layerOrder[start]);
// 搜索下一个层次,如果存在则继续递归
int nextStart = start + 1;
if (nextStart <= end && layerOrder[nextStart] != -1) {
root->left = buildTree(layerOrder, n, nextStart, min(end, nextStart + layerOrder[nextStart]));
root->right = buildTree(layerOrder, n, nextStart + layerOrder[nextStart] + 1, end);
}
return root;
}
// 主函数示例
int main() {
int layerOrder[] = {1, 2, 3, 4, 5, -1, 6, 7};
int n = sizeof(layerOrder) / sizeof(layerOrder[0]);
TreeNode* root = buildTree(layerOrder, n, 0, n - 1);
// 树的其他操作...
// ...
return 0;
}
```
在这个例子中,`layerOrder`数组存储了层序遍历结果,其中 `-1` 表示树的结束。`buildTree`函数会根据输入的开始和结束索引,以及中间的层序遍历值,逐步构建树。
阅读全文