390 likes | 541 Views
树、二叉树. 2008 赛前知识点梳理. 历届试题 ( 选 ). (13tg) 已知 7 个节点的二叉树的先根遍历是 1 2 4 5 6 3 7 (数字为节点的编号,以下同),中根遍历是 4 2 6 5 1 7 3 ,则该二叉树的后根遍历是( )。 A . 4 6 5 2 7 3 1 B . 4 6 5 2 1 3 7 C . 4 2 3 1 5 4 7 D . 4 6 5 3 1 7 2
E N D
树、二叉树 2008赛前知识点梳理
历届试题(选) • (13tg)已知7个节点的二叉树的先根遍历是1 2 4 5 6 3 7(数字为节点的编号,以下同),中根遍历是4 2 6 5 1 7 3,则该二叉树的后根遍历是( )。A.4 6 5 2 7 3 1 B.4 6 5 2 1 3 7 C.4 2 3 1 5 4 7 D.4 6 5 3 1 7 2 • (12tg_多项)已知 6 个结点的二叉树的先根遍历是 1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是( )A. 3 2 1 4 6 5 B. 3 2 1 5 4 6 C. 2 3 1 5 4 6 D. 2 3 1 4 6 5 • (11tg _多项)二叉树T的宽度优先遍历序列为A B C D E F G H I,已知A是C的父结点,D 是G 的父结点,F 是I 的父结点,树中所有结点的最大深度为3(根结点深度设为0),可知E的父结点可能是( )。A. A B. B C. C D. D E. F
石油大学 计算系 外语系 数理系 数学专业 物理专业 树的基本概念 • 树状结构是一种重要的非线性结构。它的形状类似于现实中倒立的树,结点间呈现分支和层次关系,能够方便地描述数据之间一对多的联系。
树结构的特点 • 树是一种重要的非线性数据结构,很象自然界中的树那样,从树根到大分枝、小分枝、直到叶子把数据联系起来,这种数据结构就叫做树结构,简称树。 • 树中每个分叉点称为结点,起始结点称为根结点,任意两个结点间的连接关系称为树枝,结点下面不再有分枝称为树叶。结点的前趋结点称为该结点的"双亲",结点的后趋结点称为该结点的"子女"或"孩子",同一结点的"子女"之间互称"兄弟"。 树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前趋。
J I A C B D H G F E 根结点 树结构 (除了一个称为根的结点外)每个元素都有且仅有一个直接前趋,有且仅有零个或多个直接后继。
树形结构常用的术语 • 根结点:最上层的没有前件结点的结点。 • 叶子结点:没有后件结点的结点。 • 内部结点:既有前件结点又有后件结点的结点。 • 父结点:某一结点的前件结点称为该结点的父结点。 • 子结点:某一结点的后件结点称为该结点的子结点。 • 子树:以某个结点的一个子结点为根的树称为该结点的子树。 • 结点的度:某个结点连接的子结点的个数称为该结点的度。 • 树的度:一颗树包含的所有结点的度的最大值称为这棵树的度。 • 树的深度:树的最大层次数称为树的深度。
概念细化 • ①结点的度和树的宽度 • 一个结点拥有的子树的个数称为是该结点的度 • 树的所有结点中的最大度为该树的宽度 • ②分支结点和叶结点 度为0的结点称为叶结点或端结点 度大于0的结点称作分支结点(根结点除外)
概念细化 • ③树的深度 • 在树的结构中,结点的层数从树根开始定义,根结点在第一层,其子结点在第二层,以此类推。树中结点最大的层号为树的深度。 • ④有序树和无序树 • 若结点的子树有次序排列,且先后次序不能互换,这样的树称为有序树,反之为无序树。 第一层 第二层 第三层 第四层
A B C D E F G H I J K L M 根结点:A 叶子结点:K,L,F,G,M,I,J 结点A的子结点:B,C,D 结点B的子结点:E,F 结点I的父结点: D 结点L的父结点:E 结点A的度: 3 结点B的度: 2 结点M的度:0 子树 树的深度:4 树的度:3
E D C A B G F 2. 二叉树的定义 • 二叉树是一种重要的树状结构。 • 二叉树是n(n0)个结点的有限集合,具有两个特点: • 如果二叉树非空,则有且只有一个根结点; • 每个结点最多有两个子结点,分别以这两个子结点作为根结点组成该结点的左子树和右子树。 • 二叉树的度最大为2。 根结点 右子树 左子树
E D D E C C B A A B G G F F (a) (b) (a)、(b)是不同的二叉树, (a)的左子树有四个结点, (b)的左子树有两个结点,
二叉树的5种基本形态: φ 仅有根结点的二叉树 空二叉树 右子树为空的二叉树 左、右子数均为非空的二叉树 左子树为空的二叉树
练习题 • 由3个结点可以构造出多少种不同的二叉树? 答案:共5种
E C A F D B A B C G 满二叉树 • 满二叉树是指除了最后一层外,每一层的结点都有两个子结点的二叉树。也就是说,在满二叉树的任何一层上,结点的数目都达到最大值。 深度为3的满二叉树 深度为2的满二叉树
E E C A D C B A F D B 完全二叉树 • 完全二叉树是指除了最后一层外,每一层的结点都有两个子结点,而在最后一层上,右边的若干结点缺失的二叉树。 • 完全二叉树是二叉树的特例 • 满二叉树又是完全二叉树的特例 完全二叉树的第8层有8个结点,则该树的叶子结点树为____个 完全二叉树的第7层有10个叶子结点,则整个树的结点数最多是___个
指出正确的完全二叉树 1 2 3 1 4 5 2 3 4 5 6 7 6 7 8 9 10 11 12 13 14 15 1 1 2 3 2 3 4 5 6 7 6 4 5 8 9 10 11 12
二叉树的性质 • 性质1 • 二叉树第i(i>=1)层的结点总数不超过2i-1; • 性质2 • 深度为k的二叉树的结点总数不超过2k-1(k>=1)。 第1层 1个结点,20 第2层 2个结点,21 第3层 4个结点,22 第i层 2i-1个结点; 对于深度为k的二叉树所具有的结点总数为: 14个结点,二叉树的深度为?? 20+ 21+ 22+……+ 2k-1= 2k-1
二叉树的性质 • 性质1二叉树的第k层上最多有2k-1(k1)个结点。当二叉树为满二叉树时取得极限值。 • 性质2深度为m的二叉树最多有2m-1(m 1) 个结点。 • 性质3二叉树中度为0的结点数n0和度为2的结点数n2满足n0=n2+1。 • 性质4具有n个结点的二叉树,深度h满足h[log2n]+1,当二叉树为完全二叉树时取得极限值h=[log2n]+1,其中[log2n]表示取小于等于log2n的最大整数。
设一棵完全二*树共有500个结点,则在该二*树中有______个叶子结点。 对于完全二叉树来说,从根节点开始,第n层有2的(n-1)次方个节点,因此到第n层共有节点数目为 2^0+2^1+2^2+...+2^(n-1)=2^n-1 设题目中共有n层,(最后一层并非是满的),那么我们有: 2^(n-1)-1<500<=2^n-1 这样解出n=9,即一共9层,由于2^8-1=255,2^9-1=511,因此第9层不是满的。 第8层共有2^(8-1)=128个节点,第9层有500-255=245个节点。 因此对于第8层来说,有245div2=122个节点对应着两个孩子节点(div为整除算子),另外有1个节点对应着一个孩子节点,其他5个节点就是叶子。 第9层的节点都是叶子,因此叶子节点数目为245(第9层)+5(第8层)=250个
二叉树的性质3 • 已知二叉树有50个叶结点,且仅有一个孩子的结点数为30个,求树的总结点数____ • 二叉树有50个叶子结点,则二叉树的总结点数至少有_____个 • 性质3:在任意二叉树中,如果其叶结点的个数为N0,其度数为2的结点总数为N2,则有: • N0=N2+1 129 99 N0 =6,N2=5 N0 =4,N2=3
证明 • 设树的结点总数为n,度为0、1、2的结点个数为n0、n1、n2,树的边个数为b • n=n0+n1+n2 • b=n-1 • b= 2n2+n1 • 所以有 • n-1= 2n2+n1 • n=2n2+n1+1 • n0+n1+n2=2n2+n1+1 • n0=n2+1
例题 • 1、高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。 在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为( )。 A.10 B. 11 C. 12 D. 13 E. 210 – 1 • 2、设某种二叉树有如下特点:结点的子树数目不是2个,则是0个。这样的一棵二叉树中有m(m>0)个子树为0的结点时,该二叉树上的结点总数为 ____。A.2m+l B.2m-1C.2(m-1)D.2(m+1) B B
例题 • 3、按照二叉数的定义,具有3个结点的二叉树有( )种。 • A)3 B)4 C)5 D)6 如果是4个结点,二叉树应该有多少种形态?
4、设有一棵k叉树,其中只有度为0和k两种结点,设n 0,n k,分别表示度为0和度为k的结点个数,试求出n 0和n k之间的关系(n 0 = 数学表达式,数学表达式仅含n k、k和数字)。 答:n0和nk之间的关系为:n0=(k-1) nk+1。 k=2 n0=n2+1 k=3 n0=2n3+1 k=4 n0=3n4+1
[i/2] i+1 i 2*i 2*i+1 2*(i+1) 2*(i+1)+1 二叉树的性质 • 对于完全二叉树,结点的位置与结点编号的关系: • 如果i=1,则i为根,无父结点; • 如果i<>1,则父结点为[i/2]。 • 如果2*i<=N,则i的左儿子的编号为2*i。 • 如果2*i+1<=N,则i的右儿子的编号为2*i+1。 将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点进行排序,根为1号,则49号结点的左孩子编号为___
二叉树的遍历 • 树的遍历就是寻找一条路径,依次访问树中的所有结点,且每个结点只访问一次。树的遍历实质上是将树的各个结点转换成一个线性序列。 • 根据根结点,左子树,右子树先后访问的不同顺序,可以有以下六种不同的遍历方式: • ①根,左,右(先序遍历) • ②左,根,右(中序遍历) • ③左,右,根(后序遍历)
A C B D E F G H I 先序遍历(先根遍历) • 访问根结点 先序遍历左子树先序遍历右子树 访问根结点A; 先序遍历A的左子树(D、E、H、I); (1)访问根结点B; (2)先序遍历B的左子树(D、H、I); • 访问根结点D; • 访问左子树H; • 访问右子树I; • 3. 先序遍历A的右子树(C、F、G); • 访问左子树F; • 访问右子树G。 ABDHIECFG
A C B D E F G H I 中序遍历(中根遍历) • 中序遍历左子树访问根结点中序遍历右子树 中序遍历A的左子树; 中序遍历B的左子树 • 中序遍历D的左子树 访问结点H • 访问结点D 访问结点I 访问结点B • 访问结点E 访问根结点A; 中序遍历A的右子树。 HDIBEAFCG
A C B D E F G H I 后序遍历(后根遍历) • 后序遍历左子树后序遍历右子树访问根结点 后序遍历A的左子树; 后序遍历B的左子树 • 后序遍历D的左子树 访问结点H • 后序遍历D的右子树 访问结点I • 访问结点D 后序遍历B的右子树 • 访问结点E 访问结点B 后序遍历A的右子树 访问A HIDEBFGCA
例题 • 给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA,画出此二叉树。 • 【问题分析】 • 后序遍历中最后访问的是根结点,所以后序遍历DGEBHIFCA序列中A是根结点;根据中序遍历的算法,先中序遍历左子树,然后再访问根结点,最后再中序遍历右子树,所以中序遍历DBGEACHFI序列中,根结点A的两侧分别是左子树和右子树:DBGE、CHFI。
由中根序列和后根序列来确定二叉树的结构,从而判断先根遍历序列及其它。由中根序列和后根序列来确定二叉树的结构,从而判断先根遍历序列及其它。 • 例1:(NOIP 2001提高组试题) • 已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为:C B G E A F H D I J与C G E B H F JI D A则该二叉树的先序遍历的顺序为: 解析:已知中序序列为C B G E A F H D I (1) 后序序列为C G EBH F JI D A。(2) 由(2)知:根结点为A 由(1)知:A的左子树中序序列为C B G E (3) A的右子树中序序列为F H D I J(4) 由(2)知:A的左子树后序序列为C G E B(5) A的右子树后序序列为H F J I D(6) 由(5)(6)知:A的左子树根结点为B,A的右子树根结点为D 由(3)(4)知:B的左子树为C,右子树中序序列为G E D的左子树中序序列为F H,右子树中序序列为I J 由(5)(6)知:B的右子树后序序列为G E,即根结点为E D的左子树后序序列为H F,即根结点为F D的右子树后序序列为JI,即根结点为I 综上可推出二叉树的结构如图所示 故该二叉树的先序遍历序列为:A B C E G D F H I J
由前序序列和中序序列来确定一棵二叉树,从而判断后序序列及其它由前序序列和中序序列来确定一棵二叉树,从而判断后序序列及其它 例2:(NOIP 2004提高组试题)二叉树T,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,则其后序遍历序列为( )。 A.4 2 5 7 6 3 1 B.4 2 7 5 6 3 1 C.4 2 7 5 3 6 1 D.4 7 2 3 5 6 1 E.4 5 2 6 3 7 l 解析:已知前序遍历序列为1 2 4 3 5 7 6 (1) 中序遍历序列为4 2 l 5 7 3 6 (2) 由(1)知:根结点为1 由(2)知:1的左子树中序序列为4 2 (3) 右子树中序序列为5 7 3 6 (4) 由(1)知1的左子树先序序列为2 4 (5) 1的右子树先序序列为3 5 7 6 (6) 由(3)(5)知:1的左子树根结点为2,2的左子树为4 由(4)(6)知:1的右子树根结点为3 由(4)知:3的左子树中序序列为5 7 (7) 3的右子树为6 由(6)(7)知:3的左子树根结点为5,且5的右子树为7 综上对应的一棵二叉树的结构如图所示: 故其后序遍历序列为:4 2 7 5 6 3 1 从而答案选B
由先根序列和后根序列来推断二叉树的结构,从而判断中根遍历序列以及其他由先根序列和后根序列来推断二叉树的结构,从而判断中根遍历序列以及其他 例3:(NOIP 2007提高组第14题)已知7个结点的二叉树的先根遍历是1 2 4 5 6 3 7 f数字为结点的编号,以下同),后根遍历是4 6 5 27 3 1,则该二叉树的可能的中根遍历是( )。 A.4 2 6 5 1 7 3 B.4 2 5 6 1 3 7 C.4 2 3 1 5 4 7 D.4 2 5 6 1 7 3 解析:先根遍历序列是1 2 4 5 6 3 7 (1) 后根遍历序列是4 6 5 2 7 3 1(2) 由(1)和(2)知:根结点为l,1的左子树根结点是2,右子树根结点是3,结点4是结点2的左子树,可以判断结点5是结点2的右子树的根结点,但结点6可能是结点5的左子树,也可能是它的右子树,同样结点7可能是结点3的左子树,也可能是它的右子树。对应的二叉树的结构可能是如下四种: 图①的中序遍历序列是:4 2 6 5 1 7 3 图②的中序遍历序列是:4 2 5 6 1 7 3 图③的中序遍历序列是:4 2 6 5 1 3 7 图④的中序遍历序列是:4 2 5 6 1 3 7 故此题的答案应选A B D
通过二叉树的宽度优先遍历和树中结点的最大深度及结点之间的关系来判断树的结构,从而解决有关问题。通过二叉树的宽度优先遍历和树中结点的最大深度及结点之间的关系来判断树的结构,从而解决有关问题。 例5:(NOIP 2005提高组试题)二叉树T的宽度优先遍历序列为A B C D E F G H I,已知A是C的父结点,D是G的父结点,F是I的父结点,树中所有结点的最大深度为3(根结点深度设为0),可知E的父结点可能是 ( )。 A B. B C. C D. D E. F 解析:二叉树的宽度优先遍历就是按层遍历,从根结点自上而下,自左向右访问树中的每一个结点。由题目可知A是根结点,又知A是C的父结点,可以推知B是A的左子树的根结点,C是A的右子树的根结点。又知D是G的父结点,F是I的父结点,树中所有结点的最大深度为3,故E结点可能是B结点的右子树,也可能是G结点的左子树。二叉树的部分结构图为下图①②所示: 故E的父结点可能是B,也可能是C。
二叉树的应用。有些题目要求写出前缀、中缀和后缀表达式,做这类题目时,可以先通过优先级画出一棵二叉树再分别利用先根、中根和后根遍历写出对应的序列,就是它们的前缀、中缀和后缀表达式。二叉树的应用。有些题目要求写出前缀、中缀和后缀表达式,做这类题目时,可以先通过优先级画出一棵二叉树再分别利用先根、中根和后根遍历写出对应的序列,就是它们的前缀、中缀和后缀表达式。 例5:(NoIP 2003提高组试题)表达式(1+34)*5-56/7的后缀表达式为( )。 A.1+34*5-56/7 B.一*+1 34 5/56 7 C.1 34+5*56 7/一 D.1 34 5*+56 7/一 E.1 34+5 56 7一*/ 解析:表达式对应的二叉树如右图所示: 该二叉树的后序遍历序列为: 1 34+5术56 7/一 故此题的答案选C。
- / + a * e f b - c d 应用一 • 如图所示一个表达式树,请写出三种遍历的表达式。 先序表达式 -+ a * b-cd/ef 中序表达式 a+b*c-d-e/f 后序表达式 abcd-*+ef/- 请画出下面表达式的表达式树: a*b+c/d*e-f
应用二 哈夫曼树 :又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。 在有N个叶子节点的哈夫曼树中,其节点总数为( ) A.不确定 B.2N-1 C.2N+1 D.2N
历届试题 A • (13tg)已知7个节点的二叉树的先根遍历是1 2 4 5 6 3 7(数字为节点的编号,以下同),中根遍历是4 2 6 5 1 7 3,则该二叉树的后根遍历是( )。A.4 6 5 2 7 3 1 B.4 6 5 2 1 3 7 C.4 2 3 1 5 4 7 D.4 6 5 3 1 7 2 • (12tg_多项)已知 6 个结点的二叉树的先根遍历是 1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是( )A. 3 2 1 4 6 5 B. 3 2 1 5 4 6 C. 2 3 1 5 4 6 D. 2 3 1 4 6 5 • (11tg _多项)二叉树T的宽度优先遍历序列为A B C D E F G H I,已知A是C的父结点,D 是G 的父结点,F 是I 的父结点,树中所有结点的最大深度为3(根结点深度设为0),可知E的父结点可能是( )。A. A B. B C. C D. D E. F B C B C
历届试题 C • (10tg) 满二叉树的叶结点个数为N,则它的结点总数为( )。A. N B. 2 * N C. 2 * N – 1 D. 2 * N + 1 E. 2N – 1 • (10tg) 叉树T,已知其前序遍历序列为1 2 4 3 5 7 6,中序遍历序列为4 2 1 5 7 3 6,则其后序遍历序列为( )。A. 4 2 5 7 6 3 1 B. 4 2 7 5 6 3 1 C. 4 2 7 5 3 6 1 D. 4 7 2 3 5 6 1 E. 4 5 2 6 3 7 1 • (8tg) 按照二叉数的定义,具有3个结点的二叉树有( )种。 • A)3 B)4 C)5 D)6 • (7tg) 一棵二叉树的高度为h,所有结点的度为0,或为2,则此树最少有( )个结点 • A)2h-1 B)2h-1 C)2h+1 D)h+1 B C C