C语言利用数组模拟二叉树遍历(递归方式)
二叉树遍历方式
- 先序遍历
根左右- 中序遍历
左根右- 后序遍历
左右根
C语言代码实现
#include "stdio.h"
#include "stdlib.h"
void pre_order(int arr[], int length, int k); // 二叉树先序遍历
void mid_order(int arr[], int length, int k); // 二叉树中序遍历
void post_order(int arr[], int length, int k); // 二叉树后序遍历
void printI(int arr[], int n); // 遍历打印数组元素
void pre_order(int arr[], int length, int k)
{
if (k < length)
{
printf("%d ", arr[k]); // root
pre_order(arr, length, 2 * k + 1); // 2k+1为左子树
pre_order(arr, length, 2 * k + 2); // 2k+2为右子树
}
}
void mid_order(int arr[], int length, int k)
{
if (k < length)
{
mid_order(arr, length, 2 * k + 1);
printf("%d ", arr[k]);
mid_order(arr, length, 2 * k + 2);
}
}
void post_order(int arr[], int length, int k)
{
if (k < length)
{
post_order(arr, length, 2 * k + 1);
post_order(arr, length, 2 * k + 2);
printf("%d ", arr[k]);
}
}
// 打印数组元素
void printI(int arr[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(arr) / sizeof(int); // 获取数组的长度
printf("initial: ");
printI(arr, 9);
printf("\n");
printf("pre order: ");
pre_order(arr, n, 0);
printf("\n");
printf("mid order: ");
mid_order(arr, n, 0);
printf("\n");
printf("post order: ");
post_order(arr, n, 0);
printf("\n");
return 0;
}
运行结果输出:
initial: 1 2 3 4 5 6 7 8 9
pre order: 1 2 4 8 9 5 3 6 7
mid order: 8 4 9 2 5 1 6 3 7
post order: 8 9 4 5 2 6 7 3 1