• 二叉树性质及结论的证明,天然地依赖于递归,而涉及到递归时,一般采用的证明方法为:数学归纳法

1. 树形结构 vs 线性结构

树形结构是复杂数据结构中最为简单的一类结构;

  • 树形结构不但本身很有用,还反映了许多计算过程的抽象结构;
  • 树形结构的结点形成一种层次结构;

树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含 n 个元素的数据结构里),可能存在更为复杂的联系。这种情况下,在一个包含 n 个元素的数据结构里,元素之间的最远距离就不是 n,可能小得多。

树形结构也是由结点(结构中的逻辑单元,可用于保存数据)和结点之间的连接关系(一种后继关系)构成,但其结构与线性结构(表)不同,最重要的特征包括:

  • 一个结构如果不空,其中就存在着唯一的一个起始节点,成为树根(root)

  • 按结构的连接关系,树根外的其余结点都有且只有一个前驱(这点与线性结构一样),但另一方面,一个结点可以有 0 个或者多个后继(与线性结构不同)。另外,在非空的树结构中一定有些结点并不连接到其他结点。这种结点与表的尾节点性质类似,但在一个树结构里可以存在多个这种节点

  • 结构里的所有结点都在树根结点通过后继关系可达的结点集合里。换句话说说,从树根节点出发,经过若干次后继关系可以到达结构中的任一个结点;

  • 结点之间的联系不会形成循环关系,这也就说明,结点之间的联系形成了一种序,但一般而言不像线性表那样形成一个全序;

  • 从这种结构里的任意两个不同结点出发,通过后继关系可达的两个结点集合,或者互不相交,或者一个集合是另一个集合的子集;

2. 二叉树:概念及性质

  • 一个结点的关联结点数可以为 0、1 和 2;
  • 一个二叉树可以有五种形态,
    • 空二叉树
    • 单点树(只包含一个结点,也即根节点)
    • 根节点和左子树
    • 根节点和右子树
    • 根节点+左子树+右子树

当然也可以这样理解,根节点、左子树、右子树,三方面的内容,每个有两种状态,有或者无,共两种,因此 23=8,但要排除:

  • 只有左子树;
  • 只有右子树;
  • 有左子树,右子树,但没有根;

8 - 3 = 5,

2.1 性质:非空二叉树第 i 层中至多有 2i 个结点(i0

数学归纳法进行证明,i2ii+12i2=2i+1

2.2 性质:高度为 h(从 0 开始算起)的二叉树至多有 2h+11 个结点

20+21++2h=2h+1121

2.3 性质:非空二叉树 T,如果其叶节点的个数为 n0(度为 0),度数为 2 的结点个数为 n2,那么 n0=n2+1

可以根据二叉树的 5 种不同形态,通过数学归纳法进行证明,由于条件中说了非空,那么只需考虑后续的 4 种形态。设 T 是二叉树,L(T) 表示 T 中叶节点的个数,B(T) 表示 T 中度数为 2 的结点的个数。

显然对于单点二叉树,结论是成立的;

归纳 1:如果二叉树 T包含根节点 r 且只有左子树 T1,根据归纳假设,L(T1)=B(T1)+1,又整个二叉树

归纳 2:如果原二叉树 T 包含根节点 r 和非空左右子树 T1,T2,由归纳假设:

L(T1)=B(T1)+1L(T2)=B(T2)+1

又对整颗二叉树而言,L(T)=L(T1)+L(T2)B(T)=B(T1)+B(T2)+1

所以:

L(T)=B(T)+1

3. 二叉树的遍历

每棵二叉树有唯一的根节点,可以将其看作这棵二叉树的唯一标识(根之于二叉树,好比主键之于一条记录),是基于树结构的处理过程的入口(状态空间的初始状态)。也即从根节点出发,能找到树中所有信息,其基础是从父节点找到两个子节点。

因此,实际中常用二叉树的根节点代表这棵二叉树,其左右子树由它们各自的根节点代表。

  • 二叉树 根 ⇒ (左子树,右子树)

二叉树的每个结点可能保存一些数据,因此也是一种汇集型的数据结构。

posted on 2016-08-16 11:27  未雨愁眸  阅读(195)  评论(0编辑  收藏  举报