#include<stdio.h> int a[20],n; //创建二叉树 void creat(int b) { int i; for(i=1;i<=b;i++) a[i]=i; } //先序遍历 void xianxu(int a) { if(a<=n) { printf("%d ",a);//三种遍历都是采用的递归的思想。 xianxu(2*a);//当根节点输出之后,就找出根节点所连接的左子树,递归调用寻找左子树并输出 xianxu(2*a+1);//当左子树找完之后就往回走,寻找右子树并输出 }//下面的都依次同理 } //中序遍历 void zhongxu(int a) { if(a<=n) { zhongxu(2*a); printf("%d ",a); zhongxu(2*a+1); } } //后序遍历 void houxu(int a) { if(a<=n) { houxu(2*a); houxu(2*a+1); printf("%d ",a); } } int main() { int i,j,sum; while(1) { printf("输入1:创建二叉树\n"); printf("输入2:输出二叉树的先序遍历\n"); printf("输入3:输出二叉树的中序遍历\n"); printf("输入4:输出二叉树的后序遍历\n"); scanf("%d",&sum); switch(sum) { case 1: printf("请输入要创建的二叉树的结点数\n"); scanf("%d",&n); creat(n); break; case 2: xianxu(1); printf("\n"); break; case 3: zhongxu(1); printf("\n"); break; case 4: houxu(1); printf("\n"); break; } } return 0; }