c 先序创建 二叉树
时间: 2024-11-13 09:16:35 浏览: 14
C语言中先序遍历创建二叉树的过程通常涉及到递归。先序遍历的顺序是根节点 -> 左子树 -> 右子树。以下是创建二叉树并进行先序遍历的一个简单示例:
```c
#include <stdio.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新节点的函数
TreeNode* newNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
if (!node) {
printf("Memory allocation failed.\n");
return NULL;
}
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历的辅助函数
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val); // 输出当前节点值
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
// 根据输入序列构建二叉树的主函数
TreeNode* createTree(int arr[], int start, int end) {
if (start > end) {
return NULL; // 如果索引超出范围,则返回空指针
}
int mid = (start + end) / 2; // 找到中间元素的索引
TreeNode* root = newNode(arr[mid]); // 创建根节点
root->left = createTree(arr, start, mid - 1); // 递归构建左子树
root->right = createTree(arr, mid + 1, end); // 递归构建右子树
return root;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
TreeNode* root = createTree(arr, 0, n - 1);
if (root != NULL) {
printf("Preorder traversal of the created tree:\n");
preorderTraversal(root);
}
return 0;
}
```
在这个例子中,`createTree`函数接收一个整数数组作为输入,并利用先序遍历的方式构造二叉搜索树。在`main`函数中,我们创建了一个二叉树并进行了先序遍历。
阅读全文