《二叉树的二叉链表表示.doc》由会员分享,可在线阅读,更多相关《二叉树的二叉链表表示.doc(8页珍藏版)》请在三一办公上搜索。
1、=实习报告二“二叉树的二叉链表表示”演示程序 =(一) 、程序的功能和特点1. 程序功能:利用链表对非线性二叉树进行存储表示和访问。能够创建二叉树,并且能够按前序遍历显示输出所创建的二叉树。2. 程序特点:采用java面向对象语言,对二叉树用二叉链表用类进行封装。能够创建二叉树,并且能够按前序遍历显示输出所创建的二叉树。(二) 、程序的算法设计算法一:“按前序遍历方式建立二叉树”算法:1. 【逻辑结构与存储结构设计】 逻辑结构:非线性结构。 存储结构:链式存储结构。头指针bt 头结点指针btAACBCBFEDFEDGG (a) 带头指针的二叉链表 (b) 带头结点的二叉链表 链式 二叉树的二叉
2、链表表示示意图开始创建2. 【基本操作设计】键盘输入二叉树的二叉链的数据if ( item != RefValue ) Y N封闭叶子结点创建二叉链表结点 递归生成左右子树创建成功返回二叉树的头指针创建结束3. 【算法设计】 创建二叉链表文字说明: (1).首先按前序输入二叉树。 (2).判断是否是封闭结点的标识,如果不是则创建二叉链表,递归生成其左右子树。 (3).如果是封闭结点标识则结束; (4).插入成功返回二叉链表的头指针。4. 【高级语言代码】/按前序遍历方式建立二叉树public BinTreeNode preOrderCreate ( BinTreeNode p ) double
3、 item=0.0;System.out.println(按照前序遍历次序每次输入一个结点值。);try /* 键盘接受一个double数 */ BufferedReader br=new BufferedReader( new InputStreamReader(System.in) ); item=Double.parseDouble(br.readLine(); catch(IOException e) if ( item != RefValue ) /读入的不是参照值p=new BinTreeNode(item);p.leftChild=preOrderCreate(p.leftChi
4、ld); /递归生成左子树p.rightChild=preOrderCreate(p.rightChild); /递归生成右子树/实参是空二叉树,得到返回的子二叉树else /读入的是参照数p=null; /封闭叶子结点return p; /返回二叉树p 算法二:“按前序遍历方式输出二叉树”算法:1. 【逻辑结构与存储结构设计】 逻辑结构:非线性结构。 存储结构:链式存储结构。leftChilddatarightChild结构如图所示:开始输出2. 【基本操作设计】判断链表是否为空? Y N输出该节点的数据输出该节点的数据递归输出其左,右子树输出结束3.【算法设计】 文字说明: (1).首先取
5、链表元素判断链表是否为空。 (2).链表非空先输出该结点的值,在递归调用该方法输出其左右子树。 (3).链表为空则结束,结束退出。4.【高级语言代码】/按前序遍历方式输出二叉树public void preOrderTraverse (BinTreeNode p) if ( p != null ) /输出根结点数据域 System.out.print( +p.GetData();/递归输出p的左子树 preOrderTraverse ( p.leftChild );/递归输出p的右子树 preOrderTraverse (p.rightChild );(三)、程序中类的设计 “BinTreeN
6、ode”类:1. 【逻辑结构与存储结构】 逻辑结构:非线性结构。 存储结构:链式存储结构。二叉链表也可以带头结点的方式存放,如图(b)所示。头指针bt 头结点指针btAACBCBFEDFEDGG (a) 带头指针的二叉链表 (b) 带头结点的二叉链表 链式 二叉树的二叉链表表示示意图2. 【主要成员变量说明】 主要成员变量有:data:为结点的数据域,为double类型变量。用于存放节点的数据。leftChild,rightChild:为节点的指针域,为BinTreeNode类型变量,存放结点的指向下一个节点的指针。结构如图所示:leftChilddatarightChild3. 【主要成员方
7、法说明】 public BinTreeNode ( double item): 为BinTreeNode的构造函数:一个叶子结点 。参数为该结点的数据。 public BinTreeNode ( double item, BinTreeNode left,BinTreeNode right):构造函数:非一个叶子结点。含有三个参数,分别为该结点的数据,左子树和右子树。public double GetData():返回数据域的值。4.【高级语言代码】 / /定义“二叉链表结点”类class BinTreeNode private double data; /结点数据域BinTreeNode l
8、eftChild; /结点左右指针域BinTreeNode rightChild;/构造函数:一个叶子结点public BinTreeNode ( double item) data=item; /左右指针域自动为null/构造函数:一个非叶子结点public BinTreeNode ( double item, BinTreeNode left,BinTreeNode right) data=item;leftChild=left;rightChild=right;/返回结点数据域的值public double GetData() return data; /定义“二叉链表结点”类完毕 “c
9、BinaryTree”类:1. 【逻辑结构与存储结构】 逻辑结构:非线性结构。 存储结构:链式存储结构。二叉链表可以有不带头结点(a)和带都结点(b)。头指针bt 头结点指针btAACBCBFEDFEDGG (a) 带头指针的二叉链表 (b) 带头结点的二叉链表 2. 【主要成员变量说明】 主要成员变量为:root:表示根节点,为BinTreeNode类型。RefValue:参照值为double类型。3. 【主要成员方法说明】 public cBinaryTree ( double v):构造函数:建立一棵空树,并设定参照值。 public void CreateBinTree() :以roo
10、t为根建立二叉树。 public BinTreeNode preOrderCreate ( BinTreeNode p,String s) :按前序遍历方式建立二叉树。public BinTreeNode GetRoot():得到二叉树的根。public void preOrderTraverse (BinTreeNode p):前序遍历方式输出二叉树。public static void main(String args) :主函数。 4.【高级语言代码】 /*定义“二叉链表”类*public class cBinaryTree private BinTreeNode root; /根节点p
11、rivate double RefValue; /参照值:在建立二叉树之前,/给定一个结点数据域中不可能出现的数,/用来标记二叉树的一条分支到此封闭。/构造函数:建立一棵空树,并设定参照值public cBinaryTree ( double v) RefValue=v;root=null;/以root为根建立二叉树public void CreateBinTree()root=preOrderCreate(root); /实参是空二叉树/根root得到返回的二叉树根节点/按前序遍历方式建立二叉树public BinTreeNode preOrderCreate ( BinTreeNode p
12、 ) double item=0.0;System.out.println(按照前序遍历次序每次输入一个结点值。);try /* 键盘接受一个double数 */ BufferedReader br=new BufferedReader( new InputStreamReader(System.in) ); item=Double.parseDouble(br.readLine(); catch(IOException e) if ( item != RefValue ) /读入的不是参照值p=new BinTreeNode(item);p.leftChild=preOrderCreate(
13、p.leftChild); /递归生成左子树p.rightChild=preOrderCreate(p.rightChild); /递归生成右子树/实参是空二叉树,得到返回的子二叉树else /读入的是参照数p=null; /封闭叶子结点return p; /返回二叉树p/输出以root为根的二叉树public void OutputBinTree()preOrderTraverse(root);/按前序遍历方式输出二叉树public void preOrderTraverse (BinTreeNode p) if ( p != null ) /输出根结点数据域 System.out.print( +p.GetData();/递归输出p的左子树 preOrderTraverse ( p.leftChild );/递归输出p的右子树 preOrderTraverse (p.rightChild );/主函数public static void main(String args) /定义一棵二叉树,参照值为-1cBinaryTree s=new cBinaryTree(-1.0);s.CreateBinTree();s.OutputBinTree(); /定义“二叉链表”类完毕(四)、程序的输入输出和运行结果截屏程序运行结果截屏:
链接地址:https://www.31ppt.com/p-2396478.html