这部分是二叉树周游算法的一个思路,参考是机械出版社的离散数学及算法第二版。发到博客上做个备份。运行时程序不够好,需要细化。
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
char data;
struct BiTNode *1child,*rchild;
}
BiTNode,*BiTree;
int CreateBiTree(BiTree *T)
{
char ch;
scanf("\n%c",&ch);
if(ch=='$')*T=NULL;
else {
if(!(*T=(BiTree)malloc(sizeof(BiTNode))))return 0;
(*T)->data=ch;
CreateBiTree(&((*T)->1child));
CreateBiTree(&((*T)->rchild));
}
return 1;
}
int inOrder1(BiTree T) /*前序遍历*/
{
if(T){
printf("%c",T->data);
inOrder1(T->1child);
inOrder1(T->rchild);
}
return 1;
}
int inOrder2(BiTree T) /*中序遍历,递归*/
{
if(T){
inOrder2(T->1child);
printf("%c",T->data);
inOrder2(T->rchild);
}
return 1;
}
int inOrder3(BiTree T) /*后序遍历*/
{
if(T){
inOrder3(T->1child);
inOrder3(T->rchild);
printf("%c",T->data);
}
return 1;
}
main()
{
BiTree T;
int option;
printf("请输入:0-退出;1-前序遍历;2-中序遍历;3-后序遍历\n");
scanf("%d",&option);
if(option==0)
return 0;
else
{
printf("请读入字符\n");
CreateBiTree(&T);
if(option==1)
{
printf("前序遍历序列:\n");
inOrder1(T);
}
else if(option==2)
{
printf("中序遍历序列:\n");
inOrder2(T);
}
else
{
printf("后序遍历序列:\n");
inOrder3(T);
}
}
printf("\n");
printf("\n");
getchar();
}