- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树与二叉树之三
2005-4-14 2005 Spring Data Structures by Haiyan Zhao 第5章 树与二叉树 之三 赵海燕 zhhy@sei.pku.edu.cn 软件研究所 14 Apr. 2005 二叉树(binary tree) 由结点的有限集合构成: 或者为空集 或者由一个根结点及两棵不相交的分别称作这个根的左子树和右子树的二叉树(它们也是结点的集合)组成 递归的定义。二叉树可以是空集合,因此根可以有空的左子树或右子树,或者左右子树皆为空。也即它的每一个结点至多有两棵子树,并且子树有左右之分,不能随意颠倒 二叉树 vs 树 二叉树不是树的特殊情形,它们是两种数据结构 树和二叉树之间最主要的差别: 二叉树中结点的子树要区分为左子树和右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树 (3)和(4)是两棵不同的二叉树,但作为树,它们是相同的 在二叉树中可定义类似树中的概念 满二叉树(Full Binary Tree) 完全二叉树(Complete Binary Tree) 若一棵二叉树 最多只有最下面的两层结点度数可以小于2 最下面一层的结点都集中在该层最左边的若干位置上 则称此二叉树为完全二叉树 在许多算法和算法分析中都明显地或隐含地用到完全二叉树的概念 扩充二叉树(Extended Binary Tree) 当二叉树里出现空的子树时,就增加新的、特殊的结点——空树叶 对于原来二叉树里度数为1的分支结点,在它下面增加一个空树叶 对于原来二叉树的树叶,在它下面增加两个空树叶 扩充的二叉树是满二叉树,新增加的空树叶(外部结点)的个数等于原来二叉树的结点(内部结点)个数加1 扩充二叉树 外部路径长度E 从扩充的二叉树的根到每个外部结点的路径长度之和 内部路径长度I 扩充的二叉树里从根到每个内部结点的路径长度之和 E和I两个量之间的关系为 E=I+2n n 是内部结点的个数 二叉树的性质 性质2. 深度为 k 的二叉树至多有2k+1-1个结点 (k ? 0) 二叉树的性质 性质3. 对任何一棵非空二叉树T,如果叶结点 数为n0,度为2的结点数为n2,则n0=n2+1 二叉树的性质 性质7. 对任意扩充二叉树,外部路径长度E和内部路径长度I之间满足 E = I + 2n的关系, 其中n为内部结点个数。 二叉树的性质 证明:当n=1时,I=0, E=2, 此等式成立。 设有n个内部结点的扩充二叉树,下式成立。 En = In+2n (1) 对于 n+1 个内部结点的扩充二叉树,去掉一个原来为树叶、路径长度为K的内部结点,内部路径长度变为: In = In+1-K (2) 外部路径长度变为: En = En+1-2(K+1)+K = En+1 -K-2 即: En+1= En+K+2 En+1 = (In+2n) +K+2 = (In+1-K) +2n+K+2 代入(1) 代入(2) = In+1+2(n+1) 二叉树的基本运算 二叉树的类型:BTree;二叉树中结点的类型:BNode。除了树上的一般运算之外, 1. BNode leftchild(BNode p) 求二叉树中某个指定结点的左子女结点,当指定结点没有左子女时,返回一特殊值NULL; 2. BNode rightchild(BNode p) 求二叉树中某个指定结点的右子女结点,当指定结点没有右子女时,返回一特殊值NULL; 3. 二叉树的周游 周游二叉树 周游二叉树的方法 深度优先周游二叉树 通过变换根结点的周游顺序,可以得到以下三种方案: 前序周游(DLR次序): 访问根结点;前序周游左子树;前序周游右子树。 中序周游(LDR次序),也称对称序周游: 中序周游左子树;访问根结点;中序周游右子树。 后序周游(LRD次序): 后序周游左子树;后序周游右子树;访问根结点。 深度优先周游二叉树 深度周游如下二叉树 二叉树的周游算法 按实现方式分为: 递归算法 void visit(BNode p); /*p是被周游的二叉树的结点*/ 非递归算法 算法中维持一个栈 深度优先递归实现:前序次序 访问根; visit(
文档评论(0)