//聽创建二叉树,输入先序遍历序列:ABC##DE#G##F###
//聽先序遍历输出节点:ABCDEGF
//聽作为对比参考:
//聽中序遍历输出节点:CBEGDFA
//聽后序遍历输出节点:CGEFDBA
#include
#include
typedef聽struct聽Node
{
聽聽聽聽char聽data;
聽聽聽聽struct聽Node聽*lchild;
聽聽聽聽struct聽Node聽*rchild;
}Bitree;
//用"先序遍历"算法创建二叉树
void聽CreateBiTree(Bitree聽**bt)
{
聽聽聽聽char聽s;
聽聽聽聽scanf("%c",&s);聽//输入数据
聽聽聽聽if(s=='#')聽//'#'是空节点,或者称为"虚有"的节点
聽聽聽聽聽聽聽聽*bt=NULL;
聽聽聽聽else
聽聽聽聽{
聽聽聽聽聽聽聽聽*bt=(Bitree聽*)malloc(sizeof(Bitree));
聽聽聽聽聽聽聽聽(*bt)->data=s;
聽聽聽聽聽聽聽聽CreateBiTree(&((*bt)->lchild));
聽聽聽聽聽聽聽聽CreateBiTree(&((*bt)->rchild));
聽聽聽聽}
}
//用"先序遍历"输出节点
void聽preOrder(Bitree聽*ptr)
{
聽聽聽聽if(ptr!=NULL)
聽聽聽聽{
聽聽聽聽聽聽聽聽printf("%c",ptr->data);
聽聽聽聽聽聽聽聽preOrder(ptr->lchild);
聽聽聽聽聽聽聽聽preOrder(ptr->rchild);
聽聽聽聽}
}
//用"中序遍历"输出节点
void聽inOrder(Bitree聽*ptr)
{
聽聽聽聽if(ptr!=NULL)
聽聽聽聽{
聽聽聽聽聽聽聽聽inOrder(ptr->lchild);
聽聽聽聽聽聽聽聽printf("%C",ptr->data);
聽聽聽聽聽聽聽聽inOrder(ptr->rchild);
聽聽聽聽}
}
//用"后序遍历"输出节点
void聽postOrder(Bitree聽*ptr)
{
聽聽聽聽if(ptr!=NULL)
聽聽聽聽{
聽聽聽聽聽聽聽聽postOrder(ptr->lchild);
聽聽聽聽聽聽聽聽postOrder(ptr->rchild);
聽聽聽聽聽聽聽聽printf("%C",ptr->data);
聽聽聽聽}
}
int聽main()
{
聽聽聽聽Bitree聽*root;
聽聽聽聽printf("创建二叉树,输入先序遍历序列:");
聽聽聽聽CreateBiTree(&root);
聽聽聽聽printf("先序遍历输出节点:聽");
聽聽聽聽preOrder(root);
聽聽聽聽//以下的"中序遍历"和"后序遍历"是作为对比参考
聽聽聽聽printf("\n\n中序遍历输出节点:聽");
聽聽聽聽inOrder(root);
聽聽聽聽printf("\n后序遍历输出节点:聽");
聽聽聽聽postOrder(root);
聽聽聽聽printf("\n");
聽聽聽聽return聽0;
}![]()
|