ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:65.04KB ,
资源ID:27210793      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27210793.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12信管实验报告材料树与二叉树地基本操作.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

12信管实验报告材料树与二叉树地基本操作.docx

1、12信管实验报告材料树与二叉树地基本操作 管理 学院 信管 专业 12(1) 班 学号 3112004734 姓名 协作者: 无 教师评定_实验题目 树与二叉树的基本操作 实验评分表指导教师评分标准序号评分项目评分标准满分打分1完成度按要求独立完成实验准备、程序调试、实验报告撰写。202实验内容(1) 完成功能需求分析、存储结构设计;(2) 程序功能完善、可正常运行;(3) 测试数据正确,分析正确,结论正确。303实验报告内容齐全,符合要求,文理通顺,排版美观。404总结对实验过程遇到的问题能初步独立分析,解决后能总结问题原因及解决方法,有心得体会。10下述代码尽管输入eclipse或者JC验

2、证,绝无弄虚作假实验报告一、 实验目的与要求1. 本实验通过对线性表各种操作的算法设计,理解和掌握线性表的概念、存储结构及操作要求,体会顺序和链式两种存储结构的特点; 2. 根据操作的不同要求,选择合适的存储结构,设计并实现算法,对算法进行时间复杂度分析,从而达到掌握数据结构的研究方法、算法设计和分析方法的目的。 二、 实验内容1. 在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。(1) 输出叶子结点/求二叉树叶子结点个数的递归算法(2) public class leaf /输出叶子结点(3) public static void leaf(Bina

3、ryTree bitree)(4) leaf(bitree.root);(5) (6) public static void leaf(BinaryNode p)(7) if(p!=null)(8) if(p.left=null&p.right=null)(9) System.out.println(p.data+);(10) (11) leaf(p.left);(12) leaf(p.right);(13) (14) (15) (16) public static void main(String args)(17) String prelist=A,B,D,null,G,null,null

4、,null,C,E,null,null,F,G;/先根遍历序列(18) BinaryTree bitree=new BinaryTree(prelist);/以先根遍历序列构造的一棵二叉树(19) bitree.preOrder();/先根次序遍历的递归算法(20) leaf(bitree);(21) (22) String prelist2=A,B,null,null,C;/先根遍历序列(23) BinaryTree bitree2=new BinaryTree(prelist2);/以先根遍历序列构造的一棵二叉树(24) bitree2.preOrder();/先根次序遍历的递归算法(25

5、) leaf(bitree2);(26) (27) (28) 运算结果: (2)求二叉树中叶子节点的个数/求二叉树中叶子结点的个数的递归算法public class getLeaves public static int getLeaves(BinaryTree bitree) return getLeaves(bitree.root); public static int getLeaves(BinaryNode p) int i=0; if(p!=null) if(p.left=null&p.right=null) i+; getLeaves(p.left); getLeaves(p.ri

6、ght); System.out.println(i); return 0;public static void main(String args) String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E; BinaryTree bitree=new BinaryTree(prelist); bitree.preOrder(); getLeaves(bitree); String prelist2=A,B,null,null,C; BinaryTree bitree2=new BinaryTree(prelist2); bitr

7、ee2.preOrder(); getLeaves(bitree2);运算结果: (3)将每个结点的左子树和右子树交换/将二叉树的每个结点的左右子树交换的递归算法/交换二叉树的左右子树的递归算法的实现public class Bitree_revolute public static void Bitree_revolute(BinaryTree bitree) Bitree_revolute(bitree.root);/从bitree树的根结点开始遍历 public static void Bitree_revolute(BinaryNode p) if(p!=null) p.setLeft

8、Child(p.getRightChild();/交换左右子树 p.setRightChild(p.getLeftChild();/交换左右子树 System.out.println(p.data.toString(); if(p.getLeftChild()!=null) Bitree_revolute(p.getLeftChild(); if(p.getRightChild()!=null) Bitree_revolute(p.getRightChild(); public static void main(String args) String prelist=A,B,D,null,G,

9、null,null,null,C,E,null,null,F,E; BinaryTree bitree=new BinaryTree(prelist); bitree.preOrder();/先根次序遍历 Bitree_revolute(bitree); String prelist2=A,B,null,null,C; BinaryTree bitree2=new BinaryTree(prelist2); bitree2.preOrder();/先根次序遍历 Bitree_revolute(bitree2); 运算结果:(4)验证二叉树的性质3:n0=n2+1/验证二叉树的性质3的递归算法p

10、ublic class Property3 /验证二叉树的性质3,n0=n2+1private static int n0=0,n2=0;/声明并初始化2度结点数n2,0度结点数n0(0度结点数即是叶子结点数)public static void count(BinaryTree bitree)/统计二度结点数n2和叶子结点数n0 n0=0;n2=0; count(bitree.root); System.out.println(验证二叉树的性质3,n0=+n0+,n2=+n2+,n0=n2+1?+(n0=n2+1);private static void count(BinaryNode p

11、)/统计二度结点数n2和叶子结点数n0/以p结点为根的子树的结点数if(p!=null) if(p.left=null&p.right=null)/叶子结点 n0+;/ if(p.left!=null&p.right!=null)/2度结点 n2+; count(p.left); count(p.right);public static void main(String args)/测试 String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E; /以一维数组String prelist存储二叉树的标明空子树的先根遍历序列 Bin

12、aryTree bitree=new BinaryTree(prelist);/以先根遍历序列prelist构造二叉树bitree bitree.preOrder();/先根次序遍历的递归算法 count(bitree); String prelist2=A,B,null,null,C;/以一维数组String prelist2存储二叉树的标明空子树的先根遍历序列2 BinaryTree bitree2=new BinaryTree(prelist2);/以先根遍历序列构造二叉树bitree2 bitree2.preOrder();/先根次序遍历的递归算法 count(bitree);运算结果

13、:(5)判断一棵二叉树bitree是否与当前二叉树的一棵子树匹配。方法一:public class BoolIsSubTree_1 public static void main(String args) String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E; BinaryTree bitree=new BinaryTree(prelist); String prestr=bitree.preOrder(); String instr=bitree.inOrder(); String prelist2=C,E,F; Strin

14、g inlist=E,C,F; BinaryTree bitree2=new BinaryTree(prelist2,inlist); if(inlist.toString().indexOf(instr)!=-1&(prelist.toString().indexOf(prestr)!=-1) System.out.println(bitree2是bitree的子树); else System.out.println(bitree2不是bitree的子树); 运算结果:方法二:/判断一棵二叉树是否为另一颗二叉树的子树的递归算法public class BoolIsSubTree public

15、 static void main(String args) String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E;/先根遍历序列 BinaryTree bitree=new BinaryTree(prelist);/以先根遍历序列构造一棵二叉树 String inlist=E,C,F;/中根遍历序列 String prelist2=C,E,F;/先根遍历序列 BinaryTree bitree2=new BinaryTree(prelist2,inlist);/以中根遍历序列和先根遍历序列构造一棵子树 BinaryNode

16、p = null; BinaryNode q = null; bitree.postOrder(p, q, bitree2);运算结果:辅助类:BinaryNodepublic class BinaryNode/二叉树的二叉链表结点类 public T data;/数据域 public BinaryNode left,right;/链域,分别指向左右孩子结点 /构造结点,参数分别指定元素和左右孩子结点 public BinaryNode(T data,BinaryNode left,BinaryNode right)/构造二叉树结点 this.data=data; this.left=left

17、; this.right=right; /* * param args */ public BinaryNode(T data)/调用二叉树结点的构造方法 this(data,null,null);/构造指定值的叶子结点 public BinaryNode()/调用二叉树结点的构造方法 this(null,null,null); /空的结点 public boolean isLeaf() / TODO Auto-generated method stub BinaryNode p=null; if(p.left=null&p.right=null) return true; else retu

18、rn false; public BinaryNode getRightChild() /获取当前结点的右孩子结点 return this.left; public BinaryNode getLeftChild() /获取当前节点的左孩子结点 return this.right; public void setLeftChild(BinaryNode rightChild) /设置当前节点的右孩子结点 this.left=rightChild; public void setRightChild(BinaryNode leftChild) /设置 当前结点的左孩子结点 this.right=

19、leftChild; 辅助类:BinaryTreeimport java.util.LinkedList;/线性链表import java.util.Stack;/栈public class BinaryTree implements BinaryTTree public BinaryNode root;/根结点,结点结构为二叉链表 public BinaryTree() this.root=null; /构造空的二叉树 /* * param args */ public boolean isEmpty() return this.root=null; /判断二叉树是否为空 Override

20、public int count() /返回一棵二叉树(子树)的结点数 / TODO Auto-generated method stub return count(root);/返回二叉树的结点个数 public int count(BinaryNode p)/返回以p结点为根的子树的的结点个数 if(p=null) return 0; else return 1+count(p.left)+count(p.right); Override public int height() / TODO Auto-generated method stub return 0; Override pub

21、lic String preOrder() /先根次序遍历二叉树 / TODO Auto-generated method stub System.out.print(先根次序遍历二叉树: ); preOrder(root);/调用先根次序遍历二叉树的递归方法 /*System.out.println();*/ String prestr=; return prestr; public String preOrder(BinaryNode p)/先根次序遍历以p结点为根结点的子二叉树,递归方法 String prestr=; if(p!=null)/如果二叉树不为空 /*System.out.

22、println(p.data.toString()+);/访问当前结点 preOrder(p.left);/按照先根次序遍历访问当前结点的左子树,递归调用 preOrder(p.right);/按照先根次序遍历访问当前结点的右子树,递归调用*/ prestr+=p.data.toString(); preOrder(p.left); preOrder(p.right); return prestr; Override public String inOrder() /中根遍历二叉树 / TODO Auto-generated method stub System.out.print(中根次序遍

23、历二叉树: ); inOrder(root); String instr = ; /*System.out.println();*/return instr; public String inOrder(BinaryNode p)/中根次序遍历以p结点为根结点的子二叉树,递归方法 String instr=; if(p!=null)/若二叉树不空 /*inOrder(p.left); System.out.print(p.data.toString()+); inOrder(p.right);*/ inOrder(p.left); instr+=p.data.toString(); inOrd

24、er(p.right); return instr; Override public void postOrder() /后根次序遍历二叉树 / TODO Auto-generated method stub System.out.print(后根次序遍历二叉树: ); postOrder(root); System.out.println(); public void postOrder(BinaryNode p,BinaryNode q,BinaryTree bitree2)/ if(p!=null&q!=null)/如果二叉树不为空 postOrder(p.left); postOrde

25、r(p.right); /System.out.println(p.data.toString()+); /*if(p.data=q.data&p.left=q.left&p.right=q.right) postOrder(p.left); postOrder(q.left); postOrder(p.right); postOrder(q.right);/遍历bitree2 */ /if(p.data=q.data) /return postOrder(p.left,q.left,bitree2)&postOrder(p.right,q.right,bitree2); / if(p.dat

26、a=bitree2.root) if(p.data=q.data) postOrder(p.left,q.left,bitree2); postOrder(p.right,q.right,bitree2); if( (p.isLeaf()=true)&(q.isLeaf()=true)&(p.data=q.data) System.out.println(bitree2是bitree的子树); /*public boolean postOrder(BinaryNode p,BinaryTree bitree2) BinaryNode q=bitree2.root; postOrder(p.le

27、ft); postOrder(p.right); if(p.data=q.data) return postOrder(p.) */ public void postOrder(BinaryNode p)/后根次序遍历以p结点为根结点的子二叉树,递归方法 if(p!=null)/如果二叉树不为空 postOrder(p.left); postOrder(p.right); System.out.print(p.data.toString()+); Override public void levelorder() / TODO Auto-generated method stub Override public BinaryNode search(T key

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1