给定一个数组,将数组的值按层序构造一棵二叉树c语言使用递归
时间: 2023-09-17 09:13:38 浏览: 100
C语言递归实现二叉树的建立.pdf
假设数组中的第一个元素为根节点,按照从上到下、从左到右的顺序,第i个元素的左孩子为2*i,右孩子为2*i+1。
可以使用递归的方式来构造二叉树,具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 构造二叉树的递归函数
TreeNode* buildTree(int* nums, int i, int n) {
if (i > n || nums[i] == -1) {
return NULL;
}
TreeNode* root = (TreeNode*) malloc(sizeof(TreeNode));
root->val = nums[i];
root->left = buildTree(nums, 2 * i, n);
root->right = buildTree(nums, 2 * i + 1, n);
return root;
}
int main() {
int nums[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
int n = sizeof(nums) / sizeof(int) - 1;
TreeNode* root = buildTree(nums, 1, n);
return 0;
}
```
在这个例子中,数组nums中的第一个元素为0,因此我们从nums[1]开始构造二叉树。如果当前节点的值为-1,说明该节点为空,返回NULL。否则,创建一个新节点,将当前节点的值赋给该节点,然后递归构造当前节点的左右子树。最终返回根节点。
阅读全文