实验二 二叉树有关操作.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二 二叉树有关操作 实验目的 熟练掌握二叉树的基本操作的实现; 以二叉树的各种操作(建立、遍历等)的实现为重点; 通过本次实验加深对 C++语言的使用(特别是函数的参数调用、指针类型的应用和链表的建立等各种基本操作)。 实验内容 创建一颗二叉树(如图),实现其先序,中序,后序遍历。二叉树嵌套表示 为 (A(B(D(,H),E),C(F,G(I,)))); A A B C D E F G H I 实验步骤 理解二叉树遍历的基本实验原理; 分析二叉树结构,得出其遍历的算法; 用 C++语言实现该算法; 应用所给测试数据,得出结果; 实验程序 1)头文件模块#includeiostream.h #includemalloc.h #define MaxSize 100//宏定义#define MaxWidth 40 typedef char elemtype;//typedef 常用来定义一个标识符及关键字的别名 //它是语言编译过程的一部分,但它并不实际分配内存空间---字符型元素typedef struct node// 定义结点结构 { elemtype data;//数据元素 struct node *left,*right;//树节点指针 }BTree;//定义二叉树的类型2)生成二叉树 void dispstack(BTree *stack[],int top); void creatree(BTree *b,char *str)//根据嵌套括号表示法的字符串*str 生成链接存储的二叉树 { BTree *stack[MaxSize],*p;//定义一个栈和变量指针 p int top=-1,k,j=0;//top 为栈指针,k 指定是左孩子还是右孩子,j 为 str 指针 char ch; b=NULL; ch=str[j]; while(ch!=\0) { switch(ch) { case (:top++;stack[top]=p;k=1;break;//是左节点case ):top--;break; case ,:k=2;break;//右节点default:p=(BTree*)malloc(sizeof(BTree)); p-data=ch;p-left=p-right=NULL; if (b==NULL)//根节点 b=p; else { switch(k) { case 1:stack[top]-left=p;break; case 2:stack[top]-right=p;break; } } } j++; ch=str[j]; } } 输出二叉树 void printree(BTree *b)//输出二叉树 { if(b!=NULL) { coutb-data; if(b-left!=NULL||b-right!=NULL) { cout(; printree(b-left);//递归处理左子树if(b-right!=NULL) cout,; printree(b-right);//递归处理右子树cout); } } } 先序遍历二叉树 void preorder(BTree *b)//先序遍历二叉树 { if(b!=NULL) { coutb-data ; preorder(b-left); preorder(b-right); } } 先序遍历查找值为 x 的节点 BTree *find(BTree *b,elemtype x)//采用先序遍历查找值为 x 的节点 { BTree *p; if(b==NULL) return NULL; else if(b-data==x) return b; else { p=find(b-left,x); if(p!=NULL) return p; else return find(b-right,x); } } 中序遍历二叉树 void inorder(BTree *b)//中序遍历二叉树 { if(b!=NULL) { inorder(b-left); coutb-data ; inorder(b-right); } } 后序遍历二叉树 void postorder(BTree *b)//后序遍历二叉树 { if(b!=NULL) { postorder(b-left); postorder(b-right); coutb-data ; } } 主程序模块#include b.h void main() { BTree *b; creatree(b,(f(e(w),d(,v(,n),m))));//创建二叉树cout嵌套表示法:endl; printree(b); coutendl先序遍历:; preorder(b); coutendl中序遍历:; in

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档