二叉树的建立— 前中后遍历
//
// main.c
// aa
//
// Created by yyb on 16/8/4.
// Copyright © 2016年 yyb. All rights reserved.
//
#include <stdio.h>
typedef struct BiTNode //结点结构
{
char data ;//结点数据
struct BiTNode *lchild, *rchild; //左右孩子指针
}BiTNode, *BiTree;//别名
BiTree CreateBiTree ()
{
char ch;
BiTree T;
scanf("%c",&ch);
if (ch=='#') T= NULL;
else{
T= (BiTree)malloc(sizeof(BiTNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
return T;//返回根结点
}
//二叉树的前序遍历递归算法
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(int argc, const char * argv[]) {
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getchar();
printf("\n");
InOrderTraverse(T);
getchar();
printf("\n");
#pragma mark ----前序和中序用了就会不执行后序列,T=NUll了,用的话注释掉前两个
PostOrderTraverse(T);
getchar();
printf("\n");
//TEST
//1. ABC##DE#G##F###
//2. ABDG##H###CE#I##F##
return 0;
}