网站大量收购独家精品文档,联系QQ:2885784924

第十二章 二叉树.pdf

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十二章 二叉树

第十二章 二叉树 上一章介绍了链表结构:一种用非连续存储空间进行数据存储的线性结构。每个存储空 间作为一个结点,存储一个元素;所有结点存储的元素的类型相同。指针表示结点之间的前 后关系,整个数据结构看起来象一根链条。与链表类似,“二叉树”也是用一组不连续的存 储空间来存储一组同类型的元素,并用指针将这些存储空间连接起来;每个存储空间称作树 上的一个“结点”。不同的是,二叉树的指针表示“结点”之间的“父-子”关系,形成一种 非线性的数据存储结构。它看起来象一棵倒立的树。例如,图 12-1 是一棵二叉树,所存储 9 8 7 5 4 3 2 的多项式 x +4x -8x +3x +18x -4x +7x +15 。每个结点存储两个整数,代表多项式的一项, 分别是它的系数和幂。 root 18,4 4 ,8 7,2 根结点的 右子树 1,9 -8,7 -4,3 15,0 3,5 图 12-1 用二叉树表示多项式的例子 二叉树可用来存储任何类型的元素,每个结点存储一个元素的值,并有两个指针:左指 针、右指针。两个结点 A 和 B ,如果A 有一个指针指向 B ,则将A 称作 B 的“父结点”、B 称作 A 的“子结点”。每个结点最多可以有两个子结点,左指针指向的结点称作“左子结点”, 右指针指向的结点称作“右子结点”。一个结点最多只有一个父结点。  叶子结点:一个结点如果没有任何子结点,则将其称作一个“叶子结点”、或 者简称作“叶子”。  根结点:一棵二叉树中有唯一的一个结点,不是其它任何结点的子结点,这个 结点称作二叉树的“根结点”、或者简称作“根”。根结点位于二叉树的最顶层。  结点的层数:根所在的层数为 0 ;其它结点的层数是父结点所在的层数加 1。  二叉树的深度:叶子结点所在的最大层数称作树的深度。上例中二叉树的深度 是 3 。  子树:假设 B 是 A 的子结点,从B 出发能达到的全部结点构成一棵以B 为根 的树,称为A 的一棵子树。如果B 是 A 的左子结点,则该子树称为A 的左子树;如果 B 是 A 的右子结点,则该子树称为A 的右子树。 12.1 二叉树的建立 本节介绍有了一组数据后,如何建立一棵二叉树来存储这些元素的值。先看一个例子: 从一个文本文件中读入一组整数,用一棵二叉树存储这些整数。读入的第一个整数存储在根 结点 root 上。以后每读一个整数时,向 root 代表的二叉树上插入一个新的结点,存储所读 入的整数。在最终的二叉树上,任取一个结点 A :A 的值不小于它左子树上任何的值、它右 子树上每个值都大于 A 的值。下面的程序演示了建立这样的一棵二叉树的过程。 程序的第 4~9 行首先定义了二叉树结点的数据类型,包括两部分:数据域、指针域。数 据域部分定义了要存储的数据元素的类型。指针域定义两个指针:左指针、右指针;它们的 类型必须与二叉树结点的数据类型一致。 程序的第 11~27 行定义了一个递归函数 insertTree(TreeNode *root, int val),向root 所指 向的二叉树添加新的结点。每次添加一个结点,存储元素值val 。如果root 所指向的二叉树 为空,则将新结点作为二叉树的根结点,否则: (1) 如果 val 小于或等于 root 结点的值,将新结点插在 root 结点的左子树上; (2) 如果 val 大于 root 结点的值,将新结点插在 root 结点的右子树上。 程序的第 29~34 行定义了一个递归函数 delTree(TreeNode *root),删除root 所指向的二 叉树,释放

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档