#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define NULL ((void *)0)
typedef struct TNode{
char data;
struct TNode *lchild,*rchild;
}TNode,*Tree;
Tree Creat( )//按先序序列建立二叉樹
{
Tree T;
char ch=getchar();
if(ch=='#')
T=NULL;
else{
T=(TNode *)malloc(sizeof(TNode));
T->data=ch;
T->lchild=Creat();
T->rchild=Creat();
}
printf("friday\n");
return T;
}
void First(Tree T)//先序周遊————遞歸
{
TNode *p=T;
if (p != NULL) {
printf(" %c", p->data);
First( p->lchild );
First( p->rchild );
}
}
void Middle(Tree T)//中序周遊——遞歸
{
TNode *p=T; if (p != NULL) {
Middle( p -> lchild );
printf(" %c", p -> data);
Middle( p-> rchild ) ;
}
}
void Last(Tree T)//後序周遊——遞歸
{
TNode *p=T;
if (p != NULL) {
Last( p -> lchild ) ;
Last( p -> rchild ) ;
printf(" %c", p -> data);
}
}
int Leaf(Tree T)//葉子結點個數
{
TNode *p=T;
if(p != NULL) {
if((p->lchild==NULL)&&(p->rchild==NULL))
return 1;
else
return (Leaf(p->lchild)+Leaf(p->rchild));
}
else return 0;
}
int Depth(Tree T)//樹的深度
{
TNode *p=T;
int l,r;
if(!p)
return 0;
else {
l=Depth(p->lchild);
r=Depth(p->rchild);
if(l>r)
return l+1;
else
return r+1;
}
}
void Change(Tree T)//結點交換
{
TNode *p=T;
if(p!=NULL)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
Change(T->lchild);
Change(T->rchild);
}
}
int main() {
Tree T;
int t,i,l,d;
printf("\t\t\t****create****\n");
printf("please input element # is for null");
T=Creat();
printf("\t\t\t# 1. FIRST #\n");
printf("\t\t\t# 2. MIDDLE #\n");
printf("\t\t\t# 3. BACK#\n");
printf("\t\t\t# 4. LEAF NUM #\n");
printf("\t\t\t# 5. depth #\n");
printf("\t\t\t# 6. SWITCH #\n");
printf("\t\t\t# 0. QUIT #\n");
printf("\t\t\t~~~~~~~~~~~~~~~~\n");
for(i=0;;i++) {
printf("◤choise(0-6):");
scanf("%d",&t);
if(t<0||t>6)
printf("※error please input repeat \n");
else
{
switch(t)
{
case 1: printf(" ◎FIRST traverse:"); First(T); printf("\n"); break;
case 2: printf(" ◎middle traverse:");Middle(T);printf("\n"); break;
case 3: printf(" ◎BACK traverse:");Last(T); printf("\n"); break;
case 4: printf(" ◎LEAF NUM:");l=Leaf(T); printf(" %d 個\n",l); break;
case 5: printf(" ◎DEPTH:");d=Depth(T); printf(" %d\n",d); break;
case 6: printf(" █SWITCH█");Change(T); printf("\n",d); break;
case 0: printf("\t\t******BYE-BYE-BYE!******\n");return 0;
break;
}
}
}
}