Fork me on GitHub

C语言利用数组模拟二叉树遍历(递归方式)

二叉树遍历方式

  1. 先序遍历
    根左右
  2. 中序遍历
    左根右
  3. 后序遍历
    左右根

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

往期相关文章

posted @ 2024-06-03 00:05  Hui_Li  阅读(17)  评论(0编辑  收藏  举报