网站大量收购独家精品文档,联系QQ:2885784924

数据结构 二叉链表 C++实现.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构二叉链表C实现

实 验 报 告 实验目的 掌握二叉树的数据类型描述及二叉树的特性。 掌握二叉树的链式存储结构(二叉链表)的建立算法。 掌握二叉链表上二叉树的基本运算的实现。 实验内容 实现二叉树的层次递进。 将一颗二叉树的所有左右子树进行交换。 实验与算法分析 二叉树的遍历 二叉树的层次遍历采用的是队列。本题用一个一维数组来代替队列,同时设置队列的对头指针和队尾指针。 算法分析:自定义3个函数:结构 struct bitree;建立二叉链表的函数 bitree *create();按层次遍历二叉链表的函数 void lorder(bitree *t)。 结构 struct bitree 中包括数据域和两个指针域(一个指向左孩子,另一个指向右孩子)。 建立二叉链表的函数 bitree *create() 中先建立一个空队列(条件是front=1,rear=0)。 然后建立二叉链表,用一个一维数组来代替队列,存放输入的结点;输入结点时,必须按照完全二叉树的形式输入;如果非完全二叉树,则必须给定一些假象结点(虚结点),使之完全符合完全二叉树形式。当我们输入“,”时表示虚结点(结点不存在);输入结点值时,存在的结点则输入它对应的字符;最后以一个特殊字符“#”作为输入的结束,表示二叉链表已经完成。 层次遍历二叉链表的函数 void lorder(bitree *t) 中遍历结束条件为头指针下标大于尾指针下标。 将一棵二叉树的所有左右子树进行交换 建立二叉树及先序void preorder(bitree *root)、中序void inorder(bitree *root)、后序void postorder(bitree *root)3种遍历算法都写成子函数,然后分别在子函数中调用。然后再建立一个实现左右子树交换的函数void leftTOright( bitree *r)。左右子树交换的遍历算法为:若二叉树为空,算法结束;否则:交换左子树的左子树和右子树;交换右子树的左子树和右子树;交换左子树和右子树的位置。 最后,是程序的主函数main(),它包含 建立二叉链表,输出交换前二叉树的先序、中序、后序的结果,输出交换后 二叉链表的先序、中序、后序的遍历结果。输出前后结果,方便比较顺序变化。 可执行程序及注释 二叉树层次遍历 #include iostream.h typedef char elemtype; struct bitree { elemtype data; bitree *lchild,*rchild; }; bitree *create() //建立二叉连表 { bitree *q[100]; //定义q数组作为队列存放二叉链表中的结点,100为最大容量 bitree *s; //二叉链表中的结点 bitree *root; //二叉链表的根指针 int front=1,rear=0; //定义队列的头指针、尾指针 char ch; //结点的data域值 root=NULL; cout请输入结点值(不存在的结点用‘,’表示,‘#’表示结束)endl; cinch; while(ch!=#) //输入值为#号,算法结束 { s=NULL; if(ch!=,) //输入数据不为逗号,表示不为虚结点,否则为虚结点 { s=new bitree; s-data=ch; s-lchild=NULL; s-rchild=NULL; } rear++; q[rear]=s; //新结点或虚结点进队 if(rear==1) root=s; else { if((s!=NULL)(q[front]!=NULL)) { if(rear%2==0) //rear为偶数,s为双亲左孩子 q[front]-lchild=s; else //rear为奇数,s为双亲右孩子 q[front]-rchild=s; } if(rear%2==1) front++; //出队 } cinch; } return root; } void lorder(bitree *t) //按层次遍历二叉树 { bitree *q[100],*p; //q代表队列 int f,r; //f、r类似于队列头指针、尾指针 q[1]=t; f=r=1; cout按层次遍历二叉树的结果为:; while (f=r) { p=q[

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档