[实验五] 二叉树的基本操作

来源:互联网 发布:linux 执行sql脚本 编辑:程序博客网 时间:2024/05/16 13:38

四、实验内容

(1) 先序创建二叉树;

(2) 分别实现二叉树的先序、中序、后序递归遍历;

(3) 统计二叉树的结点数和叶结点数;

*(4) 计算二叉树的深度;

*(5) 按值查找二叉树的指定结点;

(6) 销毁二叉树。


 #include<stdio.h>

        #include<stdlib.h>

        #define MAX_TREE_SIZE 100

        typedef struct BiTNode{

            char data;

            struct BiTNode *lchild,*rchild;

            struct BiTNode *next;

        }BiTNode,*BiTree;

 

 

       //以先序序列构建二叉树

        void Createinitial(BiTree *L){

         char n;

         scanf("%c",&n);

        if(n==' ')

         *L=NULL;

        else

    {

        *L=(BiTree)malloc(sizeof(BiTree));

        (*L)->data=n;

        Createinitial(&(*L)->lchild);

        Createinitial(&(*L)->rchild);

    }

        }

 

 

   void visit(char n,int level){

    printf("%c位于第%d层\n",n,level);

 

    }

 

     int Create1Bitree(BiTree L,int level){

        if(L)

       {

        visit(L->data,level);

        Create1Bitree(L->lchild,level+1);

        Create1Bitree(L->rchild,level+1);

        }

      }

 

 

      void Create2Bitree(BiTree L,int level){

 

         if(L)

       {

 

        Create2Bitree(L->lchild,level+1);

        visit(L->data,level);

        Create2Bitree(L->rchild,level+1);

        }

       }

 

 

       void Create3Bitree(BiTree L,int level){

        if(L)

        {

        Create3Bitree(L->lchild,level+1);

        Create3Bitree(L->rchild,level+1);

        visit(L->data,level);

        }

       }

 

  int Destrony(BiTree L){

  if(L)

    {

        if(L->rchild)

        {

            free(L);

            Destrony(L->lchild);

        }

        else

        {

           free(L);

           Destrony(L->rchild);

        }

    }

    return 0;

  }

 

    int main()

       {

         BiTree L=NULL;

         int level=1;

         printf("给二叉树的各结点赋值");

         Createinitial(&L);

         printf("按先序序列访问时打印出各结点的层数为:\n");

         Create1Bitree(L,level);

         printf("按中序序列访问时打印出各结点的层数为:\n");

         Create2Bitree(L,level);

         printf("按后序序列访问时打印出各结点的层数为:\n");

         Create3Bitree(L,level);

         Destrony(L);

         if(!Destrony(L));

         printf("\n改二叉树销毁成功");

         return 0;

        }

 

 


0 0
原创粉丝点击