2.编写函数,实现二叉树的中序递归遍历算法。(最好也能实现前缀和后缀遍历算法)
3.编写函数,实现二叉树的中序非递归遍历算法。
4.编写函数,借助队列实现二叉树的层次遍历算法。
5.编写函数,求二叉树的高度。
6.编写函数,求二叉树的结点个数。
7.编写函数,求二叉树的叶子个数。
8.编写函数,交换二叉树每个结点的左子树和右子树。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
#define MAX 100
typedef int elem;
typedef struct BiTNode
{elem data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct
{elem queue[MAX];
int front,rear;
}SP;
void preorder(BiTree t)
{/*先序遍历二叉树*/
if(t!=NULL)
{printf("%3d\t",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
void order(BiTree t)
{ /*中序遍历二叉树*/
if(t!=NULL)
{order(t->lchild);
printf("%3d\t",t->data);
order(t->rchild);}
}
void postorder(BiTree t)
{ /*后序遍历二叉树*/
if(t!=NULL)
{postorder(t->lchild);
postorder(t->rchild);
printf("%3d\t",t->data);
}
}
void level(BiTree t)
{ /*按层次遍历*/
SP*p;
p=(SP*)malloc(sizeof(SP));
p->front=0;
p->rear=0;
if(t!=NULL)
{
p->queue[p->front]=t;
p->front=p->front+1;
}
while(p->front!=p->rear)
{ t=p->queue[p->rear];
p->rear=p->rear+1;
printf("%3d",t->data);
if(t->lchild!=NULL)
{p->queue[p->front]=t->lchild;/*左孩子近队列*/
p->front=p->front+1;
}
if(t->rchild!=NULL)
{p->queue[p->front]=t->rchild;/*右孩子近队列*/
p->front=p->front+1;
}}
}
BiTree createbitree()
{/*输入先序序列建立二叉树*/
BiTree t;
int i;
scanf("%d",&i);
if(i==-1)
t=NULL;
else
{t=(BiTNode*)malloc(sizeof(BiTNode));
t->data=i;
t->lchild=createbitree();
t->rchild=createbitree();}
return t;
}
main()
{BiTree root;
root=createbitree();
printf("\n先序遍历\n");
preorder(root);
printf("\n中序遍历\n");
order(root);
printf("\n后序遍历\n");
postorder(root);
printf("\n按层遍历\n");
level(root);
getch();
}