- 二叉树性质及结论的证明,天然地依赖于递归,而涉及到递归时,一般采用的证明方法为:数学归纳法
1. 树形结构 vs 线性结构
树形结构是复杂数据结构中最为简单的一类结构;
- 树形结构不但本身很有用,还反映了许多计算过程的抽象结构;
- 树形结构的结点形成一种层次结构;
树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含
树形结构也是由结点(结构中的逻辑单元,可用于保存数据)和结点之间的连接关系(一种后继关系)构成,但其结构与线性结构(表)不同,最重要的特征包括:
一个结构如果不空,其中就存在着唯一的一个起始节点,成为树根(root)
按结构的连接关系,树根外的其余结点都有且只有一个前驱(这点与线性结构一样),但另一方面,一个结点可以有 0 个或者多个后继(与线性结构不同)。另外,在非空的树结构中一定有些结点并不连接到其他结点。这种结点与表的尾节点性质类似,但在一个树结构里可以存在多个这种节点。
结构里的所有结点都在树根结点通过后继关系可达的结点集合里。换句话说说,从树根节点出发,经过若干次后继关系可以到达结构中的任一个结点;
结点之间的联系不会形成循环关系,这也就说明,结点之间的联系形成了一种序,但一般而言不像线性表那样形成一个全序;
从这种结构里的任意两个不同结点出发,通过后继关系可达的两个结点集合,或者互不相交,或者一个集合是另一个集合的子集;
2. 二叉树:概念及性质
- 一个结点的关联结点数可以为 0、1 和 2;
- 一个二叉树可以有五种形态,
- 空二叉树
- 单点树(只包含一个结点,也即根节点)
- 根节点和左子树
- 根节点和右子树
- 根节点+左子树+右子树
当然也可以这样理解,根节点、左子树、右子树,三方面的内容,每个有两种状态,有或者无,共两种,因此
- 只有左子树;
- 只有右子树;
- 有左子树,右子树,但没有根;
8 - 3 = 5,
2.1 性质:非空二叉树第 i 层中至多有 2i 个结点(i≥0 )
数学归纳法进行证明,
2.2 性质:高度为 h (从 0 开始算起)的二叉树至多有 2h+1−1 个结点
2.3 性质:非空二叉树 T ,如果其叶节点的个数为 n0 (度为 0),度数为 2 的结点个数为 n2 ,那么 n0=n2+1
可以根据二叉树的 5 种不同形态,通过数学归纳法进行证明,由于条件中说了非空,那么只需考虑后续的 4 种形态。设
显然对于单点二叉树,结论是成立的;
归纳 1:如果二叉树
归纳 2:如果原二叉树
又对整颗二叉树而言,
所以:
3. 二叉树的遍历
每棵二叉树有唯一的根节点,可以将其看作这棵二叉树的唯一标识(根之于二叉树,好比主键之于一条记录),是基于树结构的处理过程的入口(状态空间的初始状态)。也即从根节点出发,能找到树中所有信息,其基础是从父节点找到两个子节点。
因此,实际中常用二叉树的根节点代表这棵二叉树,其左右子树由它们各自的根节点代表。
- 二叉树
⟺ 根 ⇒ (左子树,右子树)
二叉树的每个结点可能保存一些数据,因此也是一种汇集型的数据结构。