数据结构实验报告四(二叉树…

实验三:二叉树的基本操作

 

一.实验内容:实现创建和遍历二叉树的基本操作

二.实验目的:

1)掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法;

2)掌握二叉树的遍历算法(先序、中序、后序遍历算法)的思想,并学会遍历算法的递归实现和非递归实现。

三.问题描述: 

1)编程实现构造一棵二叉树的算法,适合任意合法输入的二叉树的建立,并进行相应异常处理。

2)编程实现在二叉链表这种存储方式下,实现二叉的遍历,可采用递归或者非递归实现,遍历算法可在先序、中序和后序遍历算法中任选其一。

四.问题的实现

1)二叉树的二叉链表存储表示

typedef struct BiTNode      

{

  char data;

  struct BiTNode *lchild,*rchild;   //指向该结点的左右孩子指针

}BiTNode,*BiTree;

2主要的实现思路:

a.首先定义二叉树的存储形式,这里使用了二叉链表

b.CreateBiTree(T)构造二叉链表表示的二叉树T,并用in来记录和控制当前输入的结点个数

c.InorderTraverse(T)遍历该二叉树

 

五.总结

这个小程序很基本,但是只能按先序次序输入合法的结点的值。像这样的输入就不行:

明明已经超过了结点的个数,但还是继续运行

 

正确的运行结果:

 

 

 

附:主要源程序代码(包含程序备注)

 

int i=1;//全局变量,用来记录结点的个数

 

typedef struct BiTNode

{

     char data;

     struct BiTNode *lchild,*rchild; //指向该结点的左右孩子指针

}BiTNode,*BiTree;

 

 

BiTree CreateBiTree(BiTree &T)     //构造二叉链表表示的二叉树T

{

     char ch;

  

     cout<<""<<i<<"个结点:";

     cin>>ch;

     if(ch=='#')  // #表示空树

     {

         T=NULL;

     }

     else

     {

        

          T=(BiTNode*)malloc(sizeof(BiTNode));

          if(!T)

           {

              cout<<"内存分配失败!"<<endl;

              return 0;

           }

          else

          {

              i=i+1;

              T->data=ch;

              CreateBiTree(T->lchild);

              CreateBiTree(T->rchild);

          }

     }

     return T;

}

 

void visit(char ch)

{

     cout<<ch<<endl;

}

 

void InorderTraverse(BiTree T)

{

     if(T)

     {

        

         InorderTraverse(T->lchild);//访问左子树

         visit(T->data);//访问根结点

         InorderTraverse(T->rchild);//访问右子树

     }

}

 

 

void main()

{

 

     int n;  

     BiTree T;

     cout<<"请输入结点个数"<<endl;

     cin>>n;

     cout<<"按先序次序输入二叉树中结点的值(一个字符),#表示空树"<<endl; 

    while(i<=n)

     {

      T=CreateBiTree(T);

     }

      cout<<"下面进行中序遍历"<<endl;

      InorderTraverse(T);

    

     system("pause");

 

 

}

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值