二叉树的遍历:
#include<stdio.h>
#include<malloc.h>
typedef char DateType;
//定义节点类型 定义二叉树
typedef struct BiNode
{
DateType data;
struct BiNode *lchild, *rchild;
}Binode,*BiTree;
//利用带空二叉树的先序序列创建二叉树
BiNode *CreatBiTree(BiNode *root)
{
char ch;
scanf_s("%c",&ch);
if(ch=='#')
root=NULL;
else
{
root = (BiNode*)malloc(sizeof(BiNode));
root->data = ch;
root->lchild = CreatBiTree(root->lchild);
root->rchild = CreatBiTree(root->rchild);
}
return root;
}
//先序遍历的递归实现
void PreOrder(BiNode *root)
{
if(root ==NULL)
return;
else
{
printf("%c",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
//中序遍历的递归实现
void InOrder(BiNode *root)
{
if(root ==NULL)
return;
else
{
printf("%c",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
//后序遍历的递归实现
void PostOrder(BiNode *root)
{
if(root ==NULL)
return;
else
{
printf("%c",root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
int main()
{
BiNode *root =NULL;
printf("请出入一颗带空的二叉树,空节点用“#”表示:\n");
root = CreatBiTree(root);
printf("\n该二叉树的根节点是:%c\n",root->data);
printf("\n该二叉树的前序遍历序列是:");
PreOrder(root);
printf("\n该二叉树的中序遍历序列是:");
InOrder(root);
printf("\n该二叉树的后序遍历序列是:");
PostOrder(root);
printf("\n\n");
getchar();
return 0;
}