当前位置:我的异常网» 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;
}
文章评论