构造二叉树算法的研究

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:huanhuan40705
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文介绍了由一棵二叉树的某两种遍历序列或某种遍历序列和结点的某种信息可以唯一确定该二叉树的各种可能方法。同时本文将给出基于先序序列和结点右孩子情况的构造二叉树的非递归的新算法。
  关键词:构造二叉树;遍历序列;非递归算法
  中图分类号:TP301.6 文献标识码:A文章编号:1007-9599 (2011) 13-0000-01
  Research on the Construction A Binary Tree Algorithm
  Shan Huiru
  (Suzhou University,School of Computer Science and Technology,Suzhou215006,China)
  Abstract:This article describes two kinds by the traversal of a binary tree or a sequence of node traversal sequences,and some information can uniquely identify the various possible ways the binary tree.This article will also be given based on the sequence and order situation of the right child nodes of non-recursive binary tree structure of the new algorithm.
  Keywords:Binary tree structure;Traversal sequences;Non-recursive algorithm
  一、二叉树的定义
  二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于2。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。
  在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的i次方个结点;深度为k的二叉树至多有2k-1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0=n2+1。
  二、算法的定义
  算法(Algorithm)是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。
  三、递归算法的定义
  递归是指某个函数或过程直接或间接的调用自身。一般地一个递归包括递归出口和递归体两部分,递归出口确定递归到何时结束,而递归体确定递归求解时的递推关系。递归算法有两个基本特征:一是递归算法是一种分而治之的、把复杂问题分解为简单问题的求解问题方法,对于求解某些复杂问题,递归算法分析问题的方法是有效地;而是递归算法的时间、控件效率通常比较差。因此对解决某些问题时,我们希望用递归算法分析问题,用非递归算法解决问题,这就需要把递归算法转换为非递归算法。
  四、递归算法与非递归算法的比较
  递归的代码量比非递归的代码量少,因为非递归需要额外的变量记录当前所处的位置信息,以及额外的控制语句。而递归所使用的方式是函数调用,这是非常自然的栈结构,不需要记录位置信息,不需要添加控制语句,这些工作都由函数调用的特性解决了。
  递归的执行效率比非递归的执行效率低,因为递归的实质是函数调用,而函数调用必然要进行线程栈空间的分配,记录每一次函数调用前的状态等工作,开销是比较大的。而非递归则不需要进行这些工作。
  递归与非递归调用最主要区别就是在函数调用上。在计算机的工作方式中,函数调用是以栈结构来实现的,最早调用的函数处于栈底,最晚调用的函数处于栈顶,栈中存放的是每个函数中的局部变量等信息,当函数调用返回时该函数相关的信息就会从栈中弹出。
  由此可以看出,递归每深入一层,栈的深度也会加一,而且当每一层的递归调用结束,都会自动返回上一层的递归中,因此不需要额外的变量记录当前所处的递归位置,也不需要while、if等控制语句进入或返回上一层或下一层递归。因此代码量比非递归的少。
  五、算法的对比试验
  我们的对比试验步骤如下:
  Step1:随机生成一棵二叉排序树
  Step2:得到这棵二叉排序树的先序序列和结点右孩子情况
  Step3:将得到先序序列和结点右孩子情况分别传给两种算法
  Step4:进行比较,显示结果
  所谓二叉排序树(Binary Sort Tree)又称二叉查找树。它或者是一棵空树;或者是具有下列性质的二叉树:
  1.若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2.若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3.左、右子树也分别为二叉排序树。
  运行结果如下:
  输入结点个数为1000时,新算法的时间消耗为0.370064,旧算法的时间消耗为0.396241;
  输入结点个数为3000时,新算法的时间消耗为0.345599,旧算法的时间消耗为0.386879;
  输入结点个数为4000时,新算法的时间消耗为0.342019,旧算法的时间消耗为0.396241;
  输入结点个数为6000时,新算法的时间消耗为0.331142,旧算法的时间消耗为0.391621;
  输入结点个数为8000时,新算法的时间消耗为0.343124,旧算法的时间消耗为0.386452。
  本课题是构造二叉树算法的研究,主要任务是研究基于遍历序列构建二叉树的算法,设计一个基于二叉树的先序序列和结点的右孩子情况构造二叉树的非递归新算法。通过理论分析对比试验证明本文中的新算法,相对于旧算法而言,在效率方面表现更为出色,时间消耗较少。
  本文的算法,仍有较大改进余地,鉴于新算法为非递归,所以循环的设计有待更一步的提高,进一步简化以减少算法运行时间和空间的消耗。
  参考文献:
  [1]Knuth D E.The art of computer programming,vol.1,fundamental algorithms[M].3rd ed.Reading,MA:Addison-Wesley,1997
  [3]唐自立.基于遍历序列的唯一确定树或二叉树的方法[J].小型微型计算机系统,2001,22(8):985-988
  
其他文献
摘要:项目教学法是一种师生通过共同实施一个完整的“项目”工作而进行教学活动的教学方法。本人在电子技术课程项目教学中总结了几点教学体会和思考,以期和大家共勉。  关键词:项目教学法;教学实践;体会;思考  中图分类号:G71 文献标识码:A 文章编号:1007-9599 (2011) 21-0000-01  Application Project Teaching Experience and
随着社会的发展进步,计算机网络技术是一名功臣,21世纪是计算机网络的时代,计算机普及,计算机网络技术的大量应用,家庭、学校、公司、国家机关等地方,每天都在大量的使用着计
摘要:分子生物学是生命科学和生物技术的基础学科,其教学尤其是实验教学得到了各个高等院校的普遍重视,但是对于应用性强的分子生物学软件的教学却长期以来受到忽视。笔者首次在厦门大学的夏季短学期中开设《分子生物学常用软件的应用》课程已有五余年,本文总结了分子生物学软件教学的经验,提出教学改进的建议,阐述了软件应用与实验设计的必要联系,为生物医学类学科的软件教学提供参考,为进一步提高软件教学质量和实施软件教
本文全面系统地分析阐述了CorelDRAWX5中的数学应用,特别是几何的应用。包括工具箱中的数学(几何)应用;与数学(几何)相关的辅助工具;造形的数学(几何)应用;轮廓、颜色和文本的模型、模
计算机网络实用技术课程旨在培养学生的网络理论基础和实际操作能力。但是,在实际的教学过程中,无论是理论教学、实验教学还是综合实训教学都存在着一定的问题。本文通过对实用
目的分析以视神经受损为首发症状的多发性硬化症的临床特点,探讨误诊原因。方法对3例诊断为视神经炎及球后视神经炎,给予详细的眼科检查、视觉诱发电位检查及颅脑MRI检查。结
半结构化数据是网络中一种重要的数据形式,也是进行数据挖掘的重要基础。因此要对Internet上巨量的数据进行数据挖掘,半结构化数据及模型是前提。本文介绍了半结构化数据的相关