如何创造char二叉树C语言,创建二叉树是如何输入?

当前位置:我的异常网» C语言 » 创建二叉树是如何输入?

创建二叉树是如何输入?

www.myexceptions.net  网友分享于:2013-06-14  浏览:51次

创建二叉树是怎么输入???????????

#include

#include

#define NULL 0

#define LEN_T sizeof(BTNode)

#define LEN_Q sizeof(QNode)

#define LEN_S 100

typedef char ElemType;

typedef struct BTNode

{

ElemType data;

struct BTNode *lchild,*rchild;

}BTNode,*BTree;

typedef struct QNode

{

BTree data;

struct QNode *next;

}QNode,*Queue;

typedef struct StackElemType

{

BTree data;

int f;//f=0:遍历左子树 f=1:遍历右子树

}StackElemType;

void CreateTree(BTree *T)

{

char c;

c=getchar();

if (c=='#')

(*T)=NULL;

else

{

(*T)=(BTree)malloc(LEN_T);

CreateTree(&(*T)->lchild);

(*T)->data=c;

CreateTree(&(*T)->rchild);

}

}

void Xian(BTree T)

{

if(T)

{

printf("%2c",T->data);

Xian(T->lchild);

Xian(T->rchild);

}

}

void D_Xian(BTree T)

{

BTree p=T,Stack[LEN_S];

int top=0;

do{

while(p)

{

printf("%2c",p->data);

Stack[top++]=p;

p=p->lchild;

}

if(top>0)

{

p=Stack[--top];

p=p->rchild;

}

}while(top>0||p!=NULL);

}

void Zhong(BTree T)

{

if(T)

{

Zhong(T->lchild);

printf("%2c",T->data);

Zhong(T->rchild);

}

}

void D_Zhong(BTree T)

{

BTree p=T,Stack[LEN_S];

int top=0;

do{

while(p)

{

Stack[top++]=p;

p=p->lchild;

}

if(top>0)

{

p=Stack[--top];

printf("%2c",p->data);

p=p->rchild;

}

}while(top>0 || p);

}

void Hou(BTree T)

{

if(T)

{

Hou(T->lchild);

Hou(T->rchild);

printf("%2c",T->data);

}

}

void D_Hou(BTree T)

{

StackElemType Stack[LEN_S];

BTree p=T;

int top=0;

do{

while(p)

{

Stack[top].f=0;

Stack[top].data=p;

p=p->lchild;

top++;

}

if(top>0)

{

while(Stack[top-1].f==1)

{

p=Stack[--top].data;

printf("%2c",p->data);

}

if(top>0)

{

Stack[top-1].f=1;

p=Stack[top-1].data;

p=p->rchild;

}

}

}while(top>0);

}

//队列开始

void InitQueue(Queue *front,Queue *rear)

{

(*front)=(*rear)=(Queue)malloc(LEN_Q);

}

void EnQueue(Queue *rear,BTree p)

{

Queue q;

q=(Queue)malloc(LEN_Q);

q->data=p;

q->next=NULL;

(*rear)->next=q;

(*rear)=q;

}

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值