按層次順序(同一層自左至右)遍歷二…
#include<stdio.h>
#include<stdlib.h>
#define MaxLength 100
typedef struct BiTNode//二叉樹結構
{
char data;//結點的值
struct BiTNode *lchild,*rchild;//左子樹 ,右子樹
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{
char ch;
ch=getchar();
if(ch!='#')
{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
{
printf("ERROR");
exit(0);
}
// T=(struct
BiTNode*)malloc(sizeof(struct BiTNode));
T->data=ch;
CreateBiTree(T->lchild
);
CreateBiTree(T->rchild
);
}
else T=NULL;
//return *T;
}
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data
);
Preorder(T->lchild
);
Preorder(T->rchild
);
}
}
void LevelOrderTraverse(BiTree T)
{
BiTree Q[MaxLength];
int front=0,rear=0;
BiTree p;
if(T)
{
Q[rear]=T;//根結點入隊
rear=(rear+1)%MaxLength;
}
while(front!=rear)
{
p=Q[front];
//隊頭元素出隊
front=(front+1)%MaxLength;
printf("%c
",p->data );
if(p->lchild
)//左孩子不為空,入隊
{
Q[rear]=p->lchild;
rear=(rear+1)%MaxLength;
}
if(p->rchild
)//右孩子不為空,入隊
{
Q[rear]=p->rchild
;
rear=(rear+1)%MaxLength;
}
}
}
void main()
{
BiTree T;
printf("請輸入先序遍歷的二叉樹序列(#號代表該結點為空):如(ABC##DE#G##F###)\n");
CreateBiTree(T);
Preorder(T);
printf("\n");
LevelOrderTraverse(T);
printf("\n");
}