- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构第五章、二叉树(一)
第五章 二 叉 树 非线性结构 二叉树的定义及基本概念 二叉树的性质 二叉树的基本操作和存储实现 搜索二叉树 二叉树的遍历 非线性结构 非线性结构:指在该结构中至少存在一个数据元素,有两个或两个以上的直接前驱或直接后继的元素。 树形结构和图形结构是两种非常重要的线性结构。 二叉树的定义 二叉树(Binary Tree)是n(n≥0)个相同类型的结点的有限集合。n=0的二叉树称为空二叉树(Empty Binary Tree);对于n>0的任意非空二叉树有: (1)有且仅有一个特殊的结点称为二叉树的根(Root)结点,根没有前驱结点; (2)若n>1,则除根结点外,其余结点被分成了2个互不相交的集合T1、T2 ,而T1、T2本身又是一棵二叉树,分别称为这棵二叉树的左子树(Left Subtree) R和右子树(Right Subtree)L。 二叉树的形态共有5种:空二叉树、只有根结点的二叉树、右子树为空的二叉树、左子树为空的二叉树和左、右子树非空的二叉树。 (如图) 注意: 1)空二叉树和只有根节点的二叉树也是树。 2)二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。 树的相关概念 结点(Node):表示树中的数据元素,由数据项和数据元素之间的关系组成。 结点的度(Degree of Node):结点所拥有的子树的个数。 树的度(Degree of Tree):树中各结点度的最大值。 叶子结点(Leaf Node):度为0的结点,也叫终端结点。 分支结点(Branch Node):度不为0的结点,也叫非终端结点或内部结点。 孩子(Child):结点子树的根。 双亲(Parent):结点的上层结点叫该结点的双亲。 祖先(Ancestor):从根到该结点所经分支上的所有结点。 子孙(Descendant):以某结点为根的子树中的任一结点。 兄弟(Brother):同一双亲的孩子。 堂兄弟(Sibling):同一层的双亲不同的结点。 结点的层次(Level of Node):从根结点到树中某结点所经路径上的分支数称为该结点的层次。根结点的层次规定为1,其余结点的层次等于其双亲结点的层次加1。 树的深度(Depth of Tree):树中结点的最大层次数。 两种特殊的二叉树 满二叉树(Full Binary Tree):如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 完全二叉树(Complete Binary Tree):深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为 k,有n个结点的满二叉树中编号从1到n的结点一一对应时,称为完全二叉树,如图a为一棵完全二叉树,图b为一棵非完全二叉树。 二叉树的性质 性质一:在二叉树的第 i 层上至多有 2i-1 个结点(i≥1)。 性质二:深度为k的二叉树中至多含有 2k-1 个结点,(k≥1)。 性质三:对任何一棵二叉树 T,如果其终端结点数为n0,度为2的结点数为n2,则n0 =n2+ 1。 性质四:具有n个结点的完全二叉树的深度k为[log2n]+1。 性质五: 对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对所有结点从1开始编号,则对于序号为i的结点,有: (1)如果i1,则序号为i的结点的双亲结点的序号为i/2(“/”表示整除);如果i=1,则该结点是根结点,无双亲结点。 (2)如果2i≤n,则该结点的左孩子结点的序号为2i;若2in,则该结点无左孩子。 (3)如果2i+1≤n,则该结点的右孩子结点的序号为2i+1;若2i+1n,则该结点无右孩子。 二叉树的存储实现 二叉树的存储结构主要有三种:顺序存储结构、二叉链表存储结构和三叉链表存储结构。 二叉树的顺序存储结构 : 对于一棵完全二叉树,由性质五可计算得到任意结点i的双亲结点序号、左孩子结点序号和右孩子结点序号。所以,完全二叉树的结点可按从上到下和从左到右的顺序存储在一维数组中,其结点间的关系可由性质五计算得到,这就是二叉树的顺序存储结构。 但是,对于一棵非完全二叉树,不能简单地按照从上到下和从左到右的顺序存放在一维数组中,因为数组下标之间的关系不能反映二叉树中结点之间的逻辑关系。 二叉树的二叉链表存储结构:二叉树的二叉链表存储结构是指二叉树的结点有三个域:一个数据域和两个引用域,数据域存储数据,两个引用域分别存放其左、右孩子结点的地址。当左孩子或右孩子不存在时,相应域为空,用符号 NULL或∧表示。 二叉树的三叉链表存储结构:使用二叉链表,可以非常方便地访问一个结点的子孙结点,但要访问祖先结点非常困难。可以考虑在每个结点中再增加一个引用域
文档评论(0)