信管实验报告树及二叉树的基本操作.doc
《信管实验报告树及二叉树的基本操作.doc》由会员分享,可在线阅读,更多相关《信管实验报告树及二叉树的基本操作.doc(14页珍藏版)》请在课桌文档上搜索。
1、-实验题目树与二叉树的根本操作实验评分表指导教师评分标准序号评分工程评分标准总分值打分1完成度按要求独立完成实验准备、程序调试、实验报告撰写。202实验容(1) 完成功能需求分析、存储构造设计;(2) 程序功能完善、可正常运行;(3) 测试数据正确,分析正确,结论正确。303实验报告容齐全,符合要求,文理通顺,排版美观。404总结对实验过程遇到的问题能初步独立分析,解决后能总结问题原因及解决方法,有心得体会。10实验报告一、 实验目的与要求1. 本实验通过对线性表各种操作的算法设计,理解和掌握线性表的概念、存储构造及操作要求,体会顺序和链式两种存储构造的特点;2. 根据操作的不同要求,选择适宜
2、的存储构造,设计并实现算法,对算法进展时间复杂度分析,从而到达掌握数据构造的研究方法、算法设计和分析方法的目的。二、 实验容1. 在一棵二叉链表表示的二叉树中,实现以下操作,并说明采用哪种遍历算法,其他遍历算法是否可行。(1) 输出叶子结点/求二叉树叶子结点个数的递归算法(2) publicclass leaf /输出叶子结点(3) publicstatic voidleaf(BinaryTree bitree)(4) leaf(bitree.root);(5) (6) publicstatic voidleaf(BinaryNode p)(7) if(p!=null)(8) if(p.lef
3、t=null&p.right=null)(9) System.out.println(p.data+);(10) (11) leaf(p.left);(12) leaf(p.right);(13) (14) (15) publicstaticvoid main(String args)(16) String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,G;/先根遍历序列(17) BinaryTree bitree=new BinaryTree(prelist);/以先根遍历序列构造的一棵二叉树(18) bitree.preOrder(
4、);/先根次序遍历的递归算法(19) leaf(bitree);(20) String prelist2=A,B,null,null,C;/先根遍历序列(21) BinaryTree bitree2=new BinaryTree(prelist2);/以先根遍历序列构造的一棵二叉树(22) bitree2.preOrder();/先根次序遍历的递归算法(23) leaf(bitree2);(24) (25) 运算结果:(2)求二叉树中叶子节点的个数/求二叉树中叶子结点的个数的递归算法publicclass getLeavespublicstatic intgetLeaves(BinaryTre
5、e bitree)returngetLeaves(bitree.root);publicstatic intgetLeaves(BinaryNode p)int i=0;if(p!=null) if(p.left=null&p.right=null)i+;getLeaves(p.left);getLeaves(p.right);System.out.println(i);return 0;publicstaticvoid main(String args) String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E; BinaryT
6、ree bitree=new BinaryTree(prelist); bitree.preOrder();getLeaves(bitree); String prelist2=A,B,null,null,C; BinaryTree bitree2=new BinaryTree(prelist2); bitree2.preOrder();getLeaves(bitree2);运算结果: (3)将每个结点的左子树和右子树交换/将二叉树的每个结点的左右子树交换的递归算法/交换二叉树的左右子树的递归算法的实现publicclass Bitree_revolutepublicstatic voidBi
7、tree_revolute(BinaryTree bitree)Bitree_revolute(bitree.root);/从bitree树的根结点开场遍历publicstatic voidBitree_revolute(BinaryNode p)if(p!=null)p.setLeftChild(p.getRightChild();/交换左右子树p.setRightChild(p.getLeftChild();/交换左右子树System.out.println(p.data.toString();if(p.getLeftChild()!=null)Bitree_revolute(p.getL
8、eftChild();if(p.getRightChild()!=null)Bitree_revolute(p.getRightChild();publicstaticvoid 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();/先根次序遍历Bitree_revolute(bitree);String prelist2=A,B,null,null,C;BinaryTree
9、 bitree2=new BinaryTree(prelist2);bitree2.preOrder();/先根次序遍历Bitree_revolute(bitree2);运算结果:(4)验证二叉树的性质3:n0=n2+1/验证二叉树的性质3的递归算法publicclass Property3 /验证二叉树的性质3,n0=n2+1privatestaticintn0=0,n2=0;/声明并初始化2度结点数n2,0度结点数n0(0度结点数即是叶子结点数)publicstatic void count(BinaryTree bitree)/统计二度结点数n2和叶子结点数n0n0=0;n2=0;cou
10、nt(bitree.root);System.out.println(验证二叉树的性质3,n0=+n0+,n2=+n2+,n0=n2+1+(n0=n2+1);privatestatic void count(BinaryNode p)/统计二度结点数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);publicstaticvoid main(String args)
11、/测试String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E; /以一维数组String prelist存储二叉树的标明空子树的先根遍历序列BinaryTree bitree=new BinaryTree(prelist);/以先根遍历序列prelist构造二叉树bitreebitree.preOrder();/先根次序遍历的递归算法count(bitree);String prelist2=A,B,null,null,C;/以一维数组String prelist2存储二叉树的标明空子树的先根遍历序列2BinaryTree bi
12、tree2=new BinaryTree(prelist2);/以先根遍历序列构造二叉树bitree2bitree2.preOrder();/先根次序遍历的递归算法count(bitree);运算结果:(5)判断一棵二叉树bitree是否与当前二叉树的一棵子树匹配。方法一:publicclass BoolIsSubTree_1 publicstaticvoid main(String args)String prelist=A,B,D,null,G,null,null,null,C,E,null,null,F,E;BinaryTree bitree=new BinaryTree(prelist
13、);String prestr=bitree.preOrder(); String instr=bitree.inOrder();String prelist2=C,E,F; String inlist=E,C,F; BinaryTree bitree2=new BinaryTree(prelist2,inlist);if(inlist.toString().inde*Of(instr)!=-1&(prelist.toString().inde*Of(prestr)!=-1) System.out.println(bitree2是bitree的子树); else System.out.prin
14、tln(bitree2不是bitree的子树);运算结果:方法二:/判断一棵二叉树是否为另一颗二叉树的子树的递归算法publicclass BoolIsSubTree publicstaticvoid 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;/先根遍历序列B
15、inaryTree bitree2=new BinaryTree(prelist2,inlist);/以中根遍历序列和先根遍历序列构造一棵子树BinaryNode p = null;BinaryNode q = null;bitree.postOrder(p, q, bitree2);运算结果:辅助类:BinaryNodepublicclass BinaryNode/二叉树的二叉链表结点类public T data;/数据域public BinaryNode left,right;/链域,分别指向左右孩子结点/构造结点,参数分别指定元素和左右孩子结点public BinaryNode(T da
16、ta,BinaryNode left,BinaryNode right)/构造二叉树结点this.data=data;this.left=left;this.right=right; /* * param args */public BinaryNode(T data)/调用二叉树结点的构造方法this(data,null,null);/构造指定值的叶子结点 public BinaryNode()/调用二叉树结点的构造方法this(null,null,null); /空的结点 publicboolean isLeaf() / TODO Auto-generated method stubBin
17、aryNode p=null;if(p.left=null&p.right=null)returntrue;elsereturnfalse;public BinaryNode getRightChild() /获取当前结点的右孩子结点returnthis.left;public BinaryNode getLeftChild() /获取当前节点的左孩子结点returnthis.right;publicvoid setLeftChild(BinaryNode rightChild) /设置当前节点的右孩子结点this.left=rightChild;publicvoid setRightChil
18、d(BinaryNode leftChild) /设置当前结点的左孩子结点this.right=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(
19、)return this.root=null; /判断二叉树是否为空Overridepublic int count() /返回一棵二叉树(子树)的结点数/ TODO Auto-generated method stubreturn count(root);/返回二叉树的结点个数public int count(BinaryNode p)/返回以p结点为根的子树的的结点个数if(p=null)return 0;elsereturn 1+count(p.left)+count(p.right);Overridepublic int height() / TODO Auto-generated m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 二叉 基本 操作

链接地址:https://www.desk33.com/p-14046.html