编程创建一棵二叉树

#include "stdio.h"
#include<malloc.h>
typedef struct BiTNode{
    char data;   /*结点的数据域*/
    struct BiTNode *lchild , *rchild;  /*指向左孩子和右孩子*/
} BiTNode , *BiTree;

/*创建一棵二叉树*/
void CreatBiTree(BiTree *T){
    char c;
    scanf("%c",&c);
    if(c == ' ') *T = NULL;
    else{
       *T = (BiTNode * )malloc(sizeof(BiTNode));  /*创建根结点*/
        (*T)->data = c;    /*向根结点中输入数据*/
        CreatBiTree(&((*T)->lchild));  /*递归地创建左子树*/
        CreatBiTree(&((*T)->rchild));  /*递归地创建右子树*/
    }
}

/*遍历二叉树*/
void PreOrderTraverse(BiTree T ){
    if(T){   /*递归结束条件,T为空*/
        printf("%3c",T->data);  /*访问根结点,将根结点内容输出*/
        PreOrderTraverse(T->lchild);  /*先序遍历T的左子树*/
        PreOrderTraverse(T->rchild);  /*先序遍历T的右子数*/
    }
}

void visit(BiTree p) {
    printf("%3c",p->data);
}

void layerOrderTraverse(BiTree T)
{
   BiTree queue[20],p;
   int front,rear;
   if(T!=NULL)
   {
      queue[0] = T;                /*将根结点的指针(地址)入队列*/
      front = -1;
      rear = 0;
      while(front<rear)            /*当队列不为空时进入循环*/
      {
            p = queue[++front];    /*取出队头元素*/
            visit(p);             /*访问p指向的结点元素*/
            if(p->lchild!=NULL)    /*将p结点的左孩子结点指针入队列*/
                queue[++rear] = p->lchild;
            if(p->rchild!=NULL)    /*将p结点的右孩子结点指针入队列*/
                queue[++rear] = p->rchild;
      }
   }
}

main()
{
   BiTree T = NULL;  /*最开始T指向空*/
   printf("Input some characters to create a binary tree\n");
   CreatBiTree(&T);  /*创建二叉树*/
  
   printf("\nThe squence of layerorder traversaling binary tree\n");
   layerOrderTraverse(T); 
   getchar();
   getchar();
}

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/81174816