最简单的二叉树建立与遍历

来源:互联网 发布:数据展示工具 编辑:程序博客网 时间:2024/05/16 01:49

/*先序建立二叉树,中序、后序、层序遍历二叉树*/

#include <stdio.h>

#include <stdlib.h>

#define MAX 20

typedef struct BiTNode{

    char data;

    struct BiTNode *lchild,*rchild;  /*左右孩子指针*/

}BiTNode,*BiTree;

void CreateBiTree(BiTree *T){

  char ch;     /*定义字符变量*/

  scanf("%c",&ch);

  if (ch==' ') (*T)=NULL;   /* 空格代表空指针*/

  else {

    *T=(BiTree) malloc(sizeof(BiTNode));/*申请结点   */

    if(!*T)

    exit(0);

    (*T)->data=ch;                        /*生成根结点  */

    CreateBiTree(&(*T)->lchild) ;         /*构造左子树  */

    CreateBiTree(&(*T)->rchild) ;         /*构造右子树  */

  }

}

/*中序遍历*/
void InOrder(BiTree T){

  if(T){
 
  InOrder(T->lchild);        /*中遍历左子树*/

  printf("%2c",T->data);    /*访问根结点,此处简化为输出根结点的数据值*/

  InOrder(T->rchild);       /*中序遍历右子树*/

  }

}
/*后序遍历*/
void PostOrder(BiTree T){

  if(T){

  PostOrder(T->lchild);     /*后序遍历左子树*/

  PostOrder(T->rchild);     /*后序遍历右子树*/

  printf("%2c",T->data);    /*访问根结点,此处简化为输出根结点的数据值*/

  }

}
/*层次遍历*/
void LevelOrder(BiTree T){

/*层次遍历二叉树T,从第一层开始,每层从左到右*/

   BiTree Queue[MAX],b;          /*用一维数组表示队列,front和rear分别表示队首和队尾指针*/

   int front,rear;

   front=rear=0;

   if (T) /*若树非空*/

     {
      Queue[rear++]=T;           /*根结点入队列*/

      while (front!=rear){       /*当队列非空*/

      b=Queue[front++];     /*队首元素出队列,并访问这个结点*/

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

      if (b->lchild!=NULL) Queue[rear++]=b->lchild; /*左子树非空,则入队列*/

      if (b->rchild!=NULL) Queue[rear++]=b->rchild; /*右子树非空,则入队列*/

      }

     }

}
/*主函数*/
main(){

  BiTree T=NULL;

  printf("/nCreate a Binary Tree/n");

  CreateBiTree(&T);  /*建立一棵二叉树T*/

  printf("/nThe inorder is:/n");

  InOrder(T);        /*中序遍历*/

  printf("/nThe postorder is:/n");

  PostOrder(T);      /*后序遍历*/

  printf("/nThe level order is:/n");

  LevelOrder(T);     /*层次遍历*/

}

希望大家不要吝啬自己的建议,使我能够不断改进!