层次遍历二叉树 并输出遍历结果

来源:互联网 发布:网络主播小可爱 编辑:程序博客网 时间:2024/04/29 21:11
 

#include <stdio.h>

#include <stdlib.h>

#define max 100

typedef char ElemType;  

typedef struct BiTNode{

      ElemType   data;

      struct BiTNode  *lchild,*rchild;  

} BiTNode,*BinTree;

 

//建立二叉树

 

void CreateBinTree(BinTree &T){  

char ch;

ch=getchar();

if(ch==' ') T=NULL;

else{

if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("%c" "结点建立失败!") ;

T->data=ch;

CreateBinTree(T->lchild);

CreateBinTree(T->rchild);

}

}

 

 

//遍历二叉树

 

void LevleOrder(BinTree T){  

BinTree Queue[max],p;

int front,rear;

  front=rear=0;

  if (T)  

     {

Queue[rear++]=T;

        while (front!=rear){  

                     p=Queue[front++];  

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

        if (p->lchild!=NULL) Queue[rear++]=p->lchild;

        if (p->rchild!=NULL) Queue[rear++]=p->rchild; }

     }

}

 

//按要求输出二叉树

void Print_BinTree(BinTree T,int i )  //本题的关键所在, i表示结点所在层次,初次调用时i=0

{

  if(T->rchild) Print_BinTree(T->rchild,i+1);  //本题的难点,函数递归来建立层次。

  for(int j=1;j<=i;j++) printf("  "); //打印i个空格以表示出层次

  printf("%c\n",T->data); //打印T元素,换行

  if(T->lchild) Print_BinTree(T->lchild,i+1);

}

 

int main()

{

BinTree T;int i=0;

  printf("\n创建二叉树\n");

  CreateBinTree (T);

  printf("\n层次遍历二叉树 并输出遍历结果\n");

  LevleOrder(T);

  printf("\n按树形打印输出二叉树\n");

  Print_BinTree(T, i);

  return 0;

}