第4章 树和二叉树--1

时间:2024-09-13 14:40:28 分类:信息学

4 树和二叉树

4.1

1、常见的数据结构?

1)集合                                                                      2)线性结构

集合的定义是由一组无序且唯一(即不能重                线性结构是一个有序数据元素的集合。

复)的项组成的。不包含任何元素的集合就                常用的线性结构有:线性表,栈,队列,双

叫做空集。                                                                       队列,数组,串。

   元素 1   元素 2      元素 3       元素 4     元素 5

          0             1                2                 3               4

3)树形结构                                                              4)图形结构 

n 个有限节点组成一个具有层次关系的集                     图形结构——多个对多个。

合。

2、什么是树?

树:是一种数据结构,它是由 nn>=0)个有限

节点组成一个具有层次关系的集合。树是一类非线性

结构。这种结构结点之间有分支,并具有层次关系。

它非常类似于自然界中的树。

树的作用:表达家谱顺序、行政组织结构、计算

机文件结构、书的教材章节结构等。

3、树的基本概念

1)树是 nn0)个结点的有限集。

2)当 n=0 时称为空树;

3)当 n>0 时为非空树,在任意一棵非空树中,有且仅有一个称为根的结点,其余的结点

可分为 m(m 0)个互不相交的有限集 T1,T2,,Tm,其中每一个集合又称为一棵树,并且称

为根的子树;同理,每一棵子树又可以分为若干个互不相交的有限集……

总结树的特性:

1)空树是树的特例;

2)非空树中至少有一个结点,称为树的根,只有根结点的树称为最小树;

3)在含有多个结点的树中,除根结点外,其余结点构成若干棵子树,且各子树间互

不相交

4、树的基本术语

1)树的结点:  包含一个数据元素及若干个指向其子树的分支  

2)结点的度  一个结点拥有的子树数目  

3)树的度  一棵树上所有结点度的最大值  

4)叶子结点(终端结点) 度为零的结点

5)分支结点(非终端结点): 度大于零的结点

6)路径(从根到结点的):  由从根到该结点所经分支和结点构成  

7)孩子结点:  结点的子树的根称为该结点的孩子结点  

8)双亲结点:  相应地,该结点称为孩子的双亲结点  

9)兄弟:  具有同一父结点的子结点互称兄弟  

10)堂兄弟: 其双亲在同一层的结点互为堂兄弟  

11)祖先结点:  从根到该结点所经分支上的所有结点  

12)子孙结点:  以某结点为根的子树中任一结点都称为该结点的子孙  

13)结点的层次:  从根结点到该结点所经过的路径长度加 1  

14)树的深度:  树中叶子结点具有的最大层次数  

15)树的宽度:  整棵树中某一层中最多的结点数称为树的宽度  

16)有序树: 如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称

该树为有序树,与之相对的是无序树  

17)第一个孩子:  在有序树中,最左边的子树的根称为第一个孩子  

18)最后一个孩子:  在有序树中,最右边的子树的根称为最后一个孩子

练习:参照右图的树,回答下列问题

1)该树有哪些结点

ABCDEFGHIJKLM

其中的叶子节点有 EKLGHIM ,分支节点有

ABCDFJ

2)结点 A 的度为 3 ,结点 B 的度为 2 ,树的度

3

3)请写出 A 节点到 K 节点经过的路径 A->B->F->K

4H 结点的兄弟结点有 IJ ,堂兄弟结点有 EFG

5F 结点的祖先结点有 BA ,子孙结点有 KL

6)该树的深度为 4 ,树的宽度为 6

5、树的表示方法

了解树的表示方法。

二叉链表(孩子-兄弟)表示法

在这种存储方式下,每个结点包括三部分的内容:结点值指向该结点第一个孩子结

点的指针指向该结点下一个兄弟结点的指针

4.2 二叉树

1、什么是二叉树?

二叉树是n (n0) 个结点的有限集合,这个集合或是空集,或是由一个根结点以及两棵互

不相交的、被称为根的左子树和右子树所组成;左子树和右子树分别又是一棵二叉树。

二叉树的特点:每个结点至多只有两棵子树,且二叉树的子树有左右之分,其次序不能任

意颠倒

2、满二叉树和完全二叉树

满二叉树:一棵深度为 k 且有 2k -1 结点                     完全二叉树:深度为 k n 个结点的二

的二叉树。(特点:每一层上的结点数都是                    叉树,当且仅当其每一个结点都与深度为 k

最大结点数)                                                                       的满二叉树中编号从 1 n 的结点一一对应

   (特点: 至多只有最下面两层的结点的度可

    以小于 2,且倒二层如果只有一个孩子,那

    必是左孩子。)

注意:满二叉树是叶子一个也不少的树,而完全二叉树虽然前 n-1 层是满的,但最底层却

允许在右边缺少连续若干个结点。满二叉树是完全二叉树的一个特例。

一棵深度为 k 的完全二叉树,至少有 2k-1 个结点,最多有 2k-1 个结点。

3、二叉树的性质

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

问题:在第 i 层上至少有 1 个结点。

性质 2:深度为 h 的二叉树至多有 2h-1 个结点(h1)。

问题:一棵深度为 k 且有 2k-1 个结点的二叉树称为满二叉树。

问题:一颗深度为 k 的二叉树,至少有 k 个结点。

性质 3:对任何一棵二叉树,如果其叶结点数 n0,度为 2 的结点数为 n2,则一定满

足:n0= n2+1

问题:一棵完全二叉树有 5000 个结点,可以计算出其叶结点的个数是 2500

性质 4:具有 n 个结点的完全二叉树的深度为 floor(log2n)+1

性质 5:对于一棵 n 个结点的完全二叉树,对任一个结点(编号为 i

如果 i=1,则结点 i 为根,无 父结点 ;如果 i>1,则其父结点编号为

floor(i/2)

如果 2i>n,则结点 i 子节点 ,即结点 i 叶结点 ;否则左孩子编号为

2i

如果 2i+1>n,则结点 i 右孩子 ,否则右孩子编号为 2i+1

4、二叉树的存储

1)表示方法一:数组表示法

对于完全二叉树,用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉

树上的结点元素。

用字符串表示为:string s = "LDPCFM###EH#N";

3)表示方法三:链式存储;

采用:含有两个指针域的结点结构体及链表的结构进行存储。

5、遍历方案

一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点

上,可以按某种次序执行三个操作:

1 访问根结点(D;

2 遍历该结点的左子树(L;

3 遍历该结点的右子树(R;

遍历方案:

DLR:先序遍历(Preorder Traverse,亦称前序遍历)

———访问根结点、遍历左树、遍历右树。

LDR:中序遍历(Inorder Traverse

———遍历左树、访问根结点、遍历右树。

LRD:后序遍历(Postorder Traverse

———遍历左树、遍历右树、访问根结点。

先序遍历的结果为: A B C D E F G H K

中序遍历的结果为: B D C A E H G K F

后序遍历的结果为: D C B H K G F E A