编写将无序序列[3,2,5,1,4]构造为二叉树的C语言代码
时间: 2023-07-29 20:11:14 浏览: 70
Cyuyansuanfa.rar_C 算法大全_c语言代码大全
以下是基于链表实现的二叉树构建代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 结点结构体
typedef struct node {
int data;
struct node *left, *right;
} Node;
// 创建二叉树
Node* create_tree(int arr[], int n, int i) {
if (i >= n) {
return NULL;
}
Node* root = (Node*) malloc(sizeof(Node));
root->data = arr[i];
root->left = create_tree(arr, n, 2 * i + 1);
root->right = create_tree(arr, n, 2 * i + 2);
return root;
}
// 先序遍历
void preorder_traversal(Node* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
preorder_traversal(root->left);
preorder_traversal(root->right);
}
int main() {
int arr[] = {3, 2, 5, 1, 4};
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = create_tree(arr, n, 0);
printf("先序遍历结果:");
preorder_traversal(root);
return 0;
}
```
输出结果为:
```
先序遍历结果:3 2 1 5 4
```
其中,`create_tree` 函数用于创建二叉树,`preorder_traversal` 函数用于先序遍历二叉树。在 `create_tree` 函数中,根据数组下标的规律,将当前结点的左右子结点分别设置为数组中下标为 2*i+1 和 2*i+2 的元素,递归创建整个二叉树。在 `preorder_traversal` 函数中,先输出根结点,然后递归遍历左子树和右子树。
阅读全文