建立一颗含有n个结点的二叉树,采用二叉链表存储,输出前序遍历该二叉树的遍历结果用c语言编译
时间: 2024-12-12 13:25:49 浏览: 14
创建二叉树二叉链表存储并显示。-数据结构课程幻灯片
在C语言中,我们可以使用递归的方式来实现二叉树的前序遍历。首先,我们需要定义一个结构体表示二叉链表节点,并包含指向左子节点和右子节点的指针。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
// 前序遍历函数
void preorderTraversal(struct TreeNode* root) {
if (root == NULL) return; // 如果节点为空,则返回
printf("%d ", root->val); // 访问当前节点
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
// 创建二叉树函数(假设输入数组arr用于构建)
struct TreeNode* buildTree(int arr[], int n) {
if (n <= 0) return NULL;
struct TreeNode* root = malloc(sizeof(struct TreeNode));
root->val = arr[0];
int i = 1;
for (; i < n; i++) {
int mid = findMiddle(arr, i); // 找到中间元素作为根节点的位置(假设已有的插入排序)
root->left = buildTree(arr, mid); // 递归创建左子树
root->right = buildTree(arr + mid + 1, n - mid - 1); // 递归创建右子树
}
return root;
}
// 插入排序找到数组的中间位置
int findMiddle(int arr[], int n) {
int middle = n / 2;
if (n % 2 == 0) return middle;
return middle - (arr[middle] > arr[middle + 1]);
}
int main() {
int n;
printf("请输入节点数n: ");
scanf("%d", &n);
int arr[n]; // 填充节点值...
// ...(假设你已经有了节点值)
struct TreeNode* treeRoot = buildTree(arr, n);
printf("前序遍历结果:");
preorderTraversal(treeRoot);
free(treeRoot); // 释放内存
return 0;
}
```
在这个例子中,`buildTree` 函数会根据给定的节点值数组 `arr` 和其长度 `n` 创建一棵二叉树。然后,`preorderTraversal` 函数按照前序遍历顺序打印节点。
阅读全文