- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法分析lecture6(二叉树)
Binary Trees(二叉树) Tao Liang College of software SiChuan University Binary Tree Definitions and Properties Binary Tree Traversals Binary Tree Node Implementions Binary Search Trees Heaps and Priority Queues Huffman Coding Trees Definitions and Properties 二叉树的定义:由结点(node)的有限集合组成,这个集合或者为空(empty),或由一个根结点(root)和两棵分别称为根的左子树(left subtree)和右子树(right subtree)的互不相交的二叉数组成。 介绍几个概念: 结点(Node):树中的元素,包含数据项及若干指向其子树的分支。 结点的度(Degree):结点拥有的子树数。 结点的层次:从根结点开始算起,根为第0层。 叶子(Leaf):度为零的结点,也称端结点。 孩子(Child):结点子树的根称为该结点的孩子结点。 兄弟(Sibling):同一双亲的孩子。 双亲(Parent):孩子结点的上层结点,称为这些结点的双亲。 结点的深度(Depth): 从根结点到该结点的路径的长度。 树的高度(Height):等于最深结点的深度加1。 满二叉树(full binary tree ) 的每一个结点或者是一个分支结点,并恰有两个非空子结点;或者是叶结点. 完全二叉树(complete binary tree)有严格的形状要求:从根结点起每一层从左到右填充.一棵高度为d的完全二叉树除了d-1层以外,每一层都是满的.底层叶结点集中在左边的若干位置上. The Full Binary Tree Theorem(满二叉树定理) Theorem 5.1 Full Binary Tree Theorem:The number of leaves in a non-empty full binary tree is one more than the number of internal nodes. Theorem 5.2 The number of empty subtrees in a non-empty binary tree is one more than of nodes in the tree. A Binary Tree Node ADT Clearly there are activities that relate to nodes(e.g.,reach a child or get a value),and activities that relate to trees(e.g.,tree initialization). So nodes and trees should be separate classes in a C++ implementation. //binary tree node abstract class templateclass Elem class BinNode{ public : //return the node’s element virtual Elem val()=0; //set the node’s element virtual void setval(const Elem)=0; //return the node’s left child virtual BinNode* left() const=0; //set the node’s left child virtual void setLeft(BinNode*)=0; //return the node’s right child virtual BinNode* right() const =0; //set the node’s right child virtual void setRight(BinNode*)=0; //return true if the node is a leaf virtual bool isleaf() =0; }; Binary Tree Traversals(二叉树的遍历) 查找某个结点,或对二叉树中全部结点进行某种处理,就需要 遍历。 (1)遍历定义 遍历是指按某条搜索路线寻访树中每个结点,且每个结点只被访问一次。 按先左后右的原则,一般使用三种遍历: preorde
文档评论(0)