武汉纺织大学数据结构实验报告2.doc
《武汉纺织大学数据结构实验报告2.doc》由会员分享,可在线阅读,更多相关《武汉纺织大学数据结构实验报告2.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、武汉纺织大学数据结构实验报告班级: 专业 班 姓名: 序号: 实验时间: 年 月 日 指导教师: 实验二:二叉树操作及应用一、实验目的:1、掌握二叉树的基本概念、基本操作以及各种存储结构。2、掌握二叉树的多种遍历方法。2、掌握哈夫曼树以及哈夫曼编码的求取过程。二、实验内容: 1、编写一个程序,生成一棵二叉树并进行基本操作。 实验步骤: 、在Java语言编辑环境中新建程序,输入程序内容,并保存和编译; 、运行程序,从键盘输入二叉树各个结点数据,参考书本173页【例6.1】; 、显示菜单如下: 1先序遍历 2中序遍历 3后序遍历 4层次遍历 5求结点总数 6求高度 0退出 、输入菜单选项,进行相应
2、操作并输出结果。 可参考程序为:172页先序、中序、后序遍历;174页求结点个数、求高度;185页层次遍历。 2、编写一个程序,构造哈夫曼树并获取哈夫曼编码。 实验步骤: 、在Java语言编辑环境中新建程序,参考书本205-207页程序内容,并保存和编译; 、运行程序,根据指定权值,建立哈夫曼树; 、输出哈夫曼树存储结构信息; 、输出各个哈夫曼编码。 、如有能力,请将此程序修改为:从键盘上输入权值,并构造哈夫曼树、获取哈夫曼编码。 3、编写程序,实现对二叉树的中序线索化操作。实验步骤: 、在Java语言编辑环境中新建程序,参考书本190-193页程序内容,并保存和编译; 、运行程序,建立二叉树
3、存储结构; 、对二叉树进行中序线索化,建立中序线索二叉树; 、输出中序遍历序列。三、操作步骤:1.二叉树(1)接口类BinaryTTree.javapackage tree;public interface BinaryTTree /二叉树接口,二叉树抽象数据类型boolean isEmpty();/判断二叉树是否为空int count();/返回二叉树的结点个数int height();/返回二叉树的高度void preOrder();/先根次序遍历二叉树void inOrder();/中根次序遍历二叉树void postOrder();/后根次序遍历二叉树void levelOrder()
4、;/按层次遍历二叉树BinaryNode search(T key);/查找并返回首次出现的关键字为key元素结点BinaryNode getParent(BinaryNode node);/返回node的父母结点void insertRoot(T x);/插入元素x作为根节点BinaryNode insertChild(BinaryNode p,T x,boolean leftChild);/插入孩子节点void removeChild(BinaryNode p,boolean leftChild);/删除p结点的左或右子树void removeAll();/删除二叉树(2)二叉链表结点类B
5、inaryNode.javapackage tree;public class BinaryNode /二叉树的二叉链表结点类public T data;/数据域,存储数据元素public BinaryNode left,right;/链域,分别指向左、右孩子结点/构造结点,参数分别指定元素和左、右孩子结点public BinaryNode(T data,BinaryNodeleft,BinaryNode right)this.data = data;this.left = left;this.right = right;public BinaryNode(T data)this(data,n
6、ull,null);/构造指定值的叶子节点public BinaryNode()this(null,null,null);(3)二叉树类BinaryTree.javapackage tree;/二叉树类,实现BinaryTree接口,泛型T指定节点的元素类型public class BinaryTree implements BinaryTTree public BinaryNode root;public BinaryTree()this.root = null;public boolean isEmpty() return this.root=null;public int count()
7、 return count(root);public int count(BinaryNode p)if(p=null)return 0;return 1+count(p.left)+count(p.right);public int height() return height(root);public int height(BinaryNode p)if(p = null)return 0;int lh = height(p.left);int rh = height(p.right);return (lhrh)?lh+1:rh+1;public void preOrder() Syste
8、m.out.print(先根次序遍历: );preOrder(root);System.out.println();public void preOrder(BinaryNode p)if(p!=null)System.out.print(p.data.toString()+ );preOrder(p.left);preOrder(p.right);public void inOrder() System.out.print(中根次序遍历: );inOrder(root);System.out.println();public void inOrder(BinaryNode p)if(p !=
9、 null)inOrder(p.left);System.out.print(p.data.toString()+ );inOrder(p.right);public void postOrder() System.out.print(后根次序遍历: );postOrder(root);System.out.println();public void postOrder(BinaryNode p)if(p != null)postOrder(p.left);postOrder(p.right);System.out.print(p.data.toString()+ );public void
10、levelOrder() /按层次遍历二叉树LinkedQueueBinaryNode que = new LinkedQueueBinaryNode();/创建空队列BinaryNode p = this.root;System.out.print(层次遍历: );while(p != null)System.out.print(p.data+ );if(p.left != null)que.enqueue(p.left);/p的左孩子结点入队if(p.right != null)que.enqueue(p.right);/p的右孩子结点入队p = que.dequeue();/p指向出队结
11、点,若队列空返回nullSystem.out.println();(4)使用二叉树UseBinaryTree.javapackage tree;import java.util.Scanner;/* * * author pang * */public class UseBinaryTree public static BinaryTree make(String a,String b,String c,String d,String e,String f,String g,String h)BinaryTree bitree = new BinaryTree();BinaryNode chi
12、ld_f,child_d,child_b,child_c;child_d = new BinaryNode(d,null,new BinaryNode(g);child_b = new BinaryNode(b,child_d,null);child_f = new BinaryNode(f,new BinaryNode(h),null);child_c = new BinaryNode(c,new BinaryNode(e),child_f);bitree.root = new BinaryNode(a,child_b,child_c);return bitree;public static
13、 void main(String args)System.out.println(请输入结点数据:);Scanner scan = new Scanner(System.in);String a = scan.next();String b = scan.next();String c = scan.next();String d = scan.next();String e = scan.next();String f = scan.next();String g = scan.next();String h = scan.next();BinaryTree bitree = make(a
14、,b,c,d,e,f,g,h);System.out.println(1-先序遍历n2-中序遍历n3-后序遍历n4-层次遍历n5-求结点总数n6-求高度n0-退出);System.out.println(输入菜单选项,进行相应操作并输出结果);while (true) int number = scan.nextInt();operate(bitree,number);/菜单功能方法public static void operate(BinaryTree bitree,int a)switch(a)case 1:bitree.preOrder();break;case 2:bitree.in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 纺织 大学 数据结构 实验 报告
限制150内