**一:二叉书的遍历可分为三种方法。
1:前序遍历法:
基本代码:
void PreOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
printf("%c",T->data);//显示节点数据,可以更改为其他节点的操作
PreOrderTraverse(T->lchild);//再先序遍历左子树
PreOrderTraverse(T->rchild);//最后先序遍历右子树
}
2: 中序遍历法:
基本代码:
void InOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
InOrderTraverse(T->lchild);//中序遍历左子树
printf("%c",T->data);//显示节点数据,可以更改为其他对节点操作
InOrderTraverse(T->rchild);//最后中序遍历右子树
}
3:后序遍历法
基本代码;
void PostOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
PostOrderTraverse(T->lchild);//先后序遍历左子树
PostOrderTraverse(T->rchild);//在后续遍历右子树
printf("%c",T->data);//显示节点数据,可以更改为其他对节点操作
}
总结代码,并进行运行测试
#include <stdio.h>
#include <stdlib.h>
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiNode,*BiTree;
void CreatePreBiTree(BiTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(’#’ == ch) {
*T = NULL;
}
else {
*T = (BiTree)malloc(sizeof(struct BiTNode));
if( !*T ) {
exit(-1);
}
else {
(*T)->data = ch;
CreatePreBiTree(&(*T)->lchild);
CreatePreBiTree(&(*T)->rchild);
}
}
}
void CreateInBiTree(BiTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(’#’ == ch) {
*T = NULL;
}
else {
*T = (BiTree)malloc(sizeof(struct BiTNode));
if( !*T ) {
exit(-1);
}
else {
CreateInBiTree(&(*T)->lchild);
(*T)->data = ch;
CreateInBiTree(&(*T)->rchild);
}
}
}
void CreatePostBiTree(BiTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(’#’ == ch) {
*T = NULL;
}
else {
*T = (BiTree)malloc(sizeof( struct BiTNode));
if( !*T ) {
exit(-1);
}
else {
CreatePostBiTree(&(*T)->lchild);
CreatePostBiTree(&(*T)->rchild);
(*T)->data = ch;
}
}
}
void PreOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
void InOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTree T)
{
if(T == NULL) {
return;
}
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
int main()
{
BiTree T;
CreatePreBiTree(&T); //补齐树AB#D##C##;
printf(“先序排列:”);
PreOrderTraverse(T);
printf("\n中序排列:");
InOrderTraverse(T);
printf("\n后序排列:");
PostOrderTraverse(T);
}
输入AB#D##C##