二叉树问题,根据先序序列输入字符,然后输出其先序遍历,中序遍历,后序遍历。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree
{
char data;
struct tree *left, *right; //二叉树左孩子,右孩子
}tree; //定义二叉树
int cnt;
char st[55];
tree *creat();
void zhongxu(tree *root); //中序遍历
void xianxu(tree *root); //先序遍历
void houxu(tree *root); //后序遍历
int main()
{
while(~scanf("%s", st))
{
cnt = -1;
tree *root; //定义根节点
root = creat();
xianxu(root);
printf("\n");
zhongxu(root);
printf("\n");
houxu(root);
printf("\n");
}
}
tree *creat()
{
tree *root;
if(st[++cnt] == ',')
{
root = NULL;
} //如果读到‘,’,则为空节点
else
{
root = (tree*)malloc(sizeof(tree));
root -> data = st[cnt];
root -> left = creat();
root -> right = creat();
}
return root;
}
void xianxu(tree *root)
{
if(root)
{
printf("%c", root -> data);
xianxu(root -> left);
xianxu(root -> right);
}
}
void zhongxu(tree *root)
{
if(root)
{
zhongxu(root -> left);
printf("%c", root -> data);
zhongxu(root -> right);
}
}
void houxu(tree *root)
{
if(root)
{
houxu(root -> left);
houxu(root -> right);
printf("%c", root -> data);
}
}