题目
思路
递归
先序:1.先输出根2.再输出左子3.最后输出右子。
中序:1.先输出左子2.再输出根3.最后输出右子。
后序:1.先输出左子2.再输出右子3.最后输出根。
递归出栈时会依次输出。
代码
//树的先中后序
#include<stdio.h>
//先序-根左右
int preOrder(int arr[],int n)
{
if(n>8)
{
return ;
}
printf("%d ",arr[n]);
preOrder(arr,2*n+1);
preOrder(arr,2*n+2);
}
//中序-左根右
int inOrder(int arr[],int n)
{
if(n>8)
{
return ;
}
inOrder(arr,2*n+1);
printf("%d ",arr[n]);
inOrder(arr,2*n+2);
}
//后序-左右根
int latOrder(int arr[],int n)
{
if(n>8)
{
return ;
}
latOrder(arr,2*n+1);
latOrder(arr,2*n+2);
printf("%d ",arr[n]);
}
int main()
{
int arr[10]={78,56,34,43,4,1,15,2,23} ;
preOrder(arr,0); //先序
printf("\n");
inOrder(arr,0); //中序
printf("\n");
latOrder(arr,0); //后序
return 0;
}