专题:树和二叉树基础
内容来源:《挑战程序设计竞赛》(第2版)+《算法竞赛入门经典》(第2版)+网上资料整理汇总
一、引入
1. 树是一种非线性的数据结构,用它能很好地描述有分支和层次特性的数据集合。树型结构在现实世界中广泛存在,如社会组织机构的组织关系图就可以用树型结构来表示。树在计算机领域中也有广泛应用,如在编译系统中,用树表示源程序的语法结构。在数据库系统中,树型结构是数据库层次模型的基础,也是各种索引和目录的主要组织形式。在许多算法中,常用树型结构描述问题的求解过程、所有解的状态和求解的对策等,尤其是建立在树型结构基础之上的搜索算法。
在树型结构中,二叉树是最常用的结构,它的分支个数确定、又可以为空、并有良好的递归特性,特别适宜于程序设计,因此也常常将一般树转换成二叉树进行处理。
2. 树形结构描述:一种”节点+边”数据结构。在图中用圆代表节点,用线代表边。
二、树(这里指有根树,熟练掌握概念)
1. 有根树:一棵具有根节点的树。有根树的节点之间具有父子关系。
2. 几个概念:
(1)节点:
①根节点:没有父节点的节点,在一棵树中是唯一的
②叶节点(外部节点):没有子节点的节点
③非叶节点(内部节点):除叶节点以外的节点
(2)节点x的度:节点x的子节点的数目(叶节点的度为0)
(3)节点x的深度:从根r到节点x的路径长度(即经过的边数)
(4)节点x的高:节点x到叶节点的最大路径长度
一棵树中根节点的高度最大,我们也称其为树的高度。
三、二叉树(熟练掌握操作)
1. 定义:二叉树(binary tree)是一种特殊的树形结构,它的度为2,即每个节点最多有两个子节点。每个节点的子节点分别称为左孩子、右孩子,它的两棵子树分别称为左子树、右子树。(此定义为递归定义)
5种基本形态如下:
2. 重要性质
(1)在二叉树的第i层上最多有2i-1个节点(i为正整数)
证明:数学归纳法:当i=1时,2i-1=1显然成立;现在假设第i-1层时命题成立,即第i-1层上最多有2i-2<