1. 程式人生 > >按層次順序(同一層自左至右)遍歷二…

按層次順序(同一層自左至右)遍歷二…

#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");
}