广东省汕头市高中信息技术信息学竞赛班数据结构专项培训教程07树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§7.1 树的概念

【定义】 树(Tree )是n (n>0)个结点的有限集合T ,它满足如下两个条件:

(1) 有且仅有一个特定的称为根(Root )的结点;

(2) 其余的结点可分为m (m ≥0)个互不相交的有限集合,其中每一个集合又都是一颗树,并称为根的子树(Sub Tree )。

【基本术语】k

树的结点包含一个数据元素及若干指向其子树的分支。 结点拥有的子树数称为结点的度(degree )。 如图7.1,A 的度为3,C 的度为1,F 的度为0。

度为0的结点称为叶子(leaf )或终端结点。例如K 、L 、F 、G 、M 、I 、J 。 度不为0的结点称为分支结点或非终端结点。

除根结点外,分支结点也称为内部结点。

树的度是树内各结点的度的最大值,如图7.1中树的度为3。

结点的子树的根称为该结点的孩子(Child ),该结点称为孩子的双亲(parent )。

如图7.1.1,B 为A 的子树的根,则B 是A 的孩子,而A 则是B 的双亲。

同一个双亲的孩子之间互称为兄弟(sibling ),例如B 、C 、D 互为兄弟。

将这些关系进一步推广,可认为D 是M 的祖父。结点的祖先是从根到该结点所经分支上的所有结点。例如,M 的祖先为A 、D 、H 。

反之,结点的子树中的任一结点都称为该结点的子孙,如B 的为E 、F 、K 、L 。

5. 结点的层次(level )是从根开始定义起,根为第一层,根的孩子为第二层。

若某结点在第x 层,则其子树的根就在x+1层。

树中结点的最大层次称为树的高度或深度(depth )。如图7.1的树的深度为4。

6. 如果将树中的结点的各子树看成从左到右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。如图

7.1.2。

7. 森林(forest )是m (m ≥0)棵互不相交的树的集合。

§7.2 二叉树

§7.2.1 二叉树的定义 二叉树(binary tree )是一种树型结构,它的每个结点至多只有二棵子树(即二叉树中不存在度大于2结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 (如图7.2.1)

满二叉树和完全二叉树是两种特殊形态的二叉树。 满二叉树是指深度为k ,且有2k -1个结点的二叉树。

完全二叉树是指深度为k ,有n 个结点,当且仅当每一个结点都与深度为k 的满二叉树中编号从1到n 的结点一一对应时。

§7.2.2 二叉树的性质

性质1:在二叉树的第i 层上至多有 ① 个结点(i ≥1)。

性质2:深度为k 的二叉树至多有 ② 个结点(k ≥1)。

性质3:对任意一棵二叉树,如果度为2的结点数为n 2,则其叶子结点数为 ③。

性质4:具有n 个结点的完全二叉树的深度为 ○A ○B ○C ○D

○E ○F ○G ○H ○I ○J

○K ○L ○

M 图7.1.1 ○A ○A ○B ○C ○C ○B 图7.1.2 两棵不同的有序树 ○A

○B ○C

○D ○E ○F ○G

○H ○I ○J

图7.2.1 ○1 ○2 ○3 ○4 ○5 ○6 ○7 ○

8 ○9 ○10 ○11 ○12 ○13 ○14 ○15 图7.2.2 满二叉树 ○1 ○2 ○3 ○4 ○5 ○6 ○7 ○8 ○9 ○10 ○11 ○12 图7.2.3 完全二叉树 ○1 ○2 ○3

○4 ○5 ○6 ○7 ○8 ○9 ○10 ○11 ○12 图7.2.4 非完全二叉树

性质5:如果对一棵有n 个结点的完全二叉树.....

的结点按层序编号(每层从左到右),则对任一结点i (1≤i ≤n ),有:

① 如果i=1,则结点i 是二叉树的根;如果i>1,则其双亲结点是

i div 2 ② 如果2*i>n ,则结点i 无左孩子(结点i 为叶子结点);否则其左孩子为2*i

③ 如果2*i+1>n ,则结点i 无右孩子,否则其右孩子为2*i+1

[参考答案及证明]:

① 2i-1 证明:利用归纳法 当i=1时,只有一个根结点,显然,2

i-1=20=1 正确;

假设对所有的j ,1≤j

由假设,第i-1层上至多有2i-1个结点,由于二叉树中的每个结点的度至多为2,故在第i 层上的最

大结点数为第i-1层上最大结点数的2倍,即2*2i-2=2i-1

② 2k -1

证明:深度为K 的二叉树的最大结点数为

③ n 2+1

证明:设叶子结点数为n 0,度为1的结点数为n 1,则该数结点的总数为:

n = n 0 + n 1 + n 2 (1)

树中结点之间的连线称为分支。树中除根结点外,其余每个结点都有一个分支进入,设B 为二叉树分支的总数,则有:

B = n –1 另一方面,这些分支是由度为1或2的结点射出的,所以:

B = n 1 + 2n 2

所以: n – 1 = n 1 + 2n 2 (2)

由式(1)和(2)得:

n 0 + n 1 + n 2 – 1 = n 1 + 2n 2

即: n 0 = n 2 + 1

证明:假设深度为K 的完全二叉树的结点数为n ,则根据性质2和完全二叉树定义有:

于是

∵ k 是整数 ∴ ⑤ 证明略

§7.2.2 二叉树的存储结构

1.顺序存储结构

将二叉树的所有结点按一定的次序,存储到一片连续的存储单元中。这种结构,较适用于满二叉树或近似满二叉树。

如图7.2.5中完全二叉树的存储结构如下: A B C D E F G H I J K L M

图7.2.6中的二叉树的存储结构如下:

可以看出,当二叉树较稀疏时,采用顺序存储将造成浪费。

[练习] 如果完全二叉树最多有n 层,那么存储该树的数组最少设________个单

元;

某结点存储于S[i],则存在双亲结点的条件: if ______________________

其双亲结点位于S[ ____ ],其左孩子结点位于S[ ____ ]; A B C D F G I M ○A ○B ○C ○D ○E ○F ○G ○H ○ ○J ○K ○L ○M 图7.2.5 ○A

○B ○C

○D ○F ○G

○I ○

M 图7.2.6