树形结构是复杂数据结构中最为简单的一类结构;
树形结构不但本身很有用,还反映了许多计算过程的抽象结构;树形结构的结点形成一种层次结构;树和链表、队列、栈等结构一样,也是一些基本元素的汇集,单元素之间不是简单的线性关系(在一个包含 n 个元素的数据结构里),可能存在更为复杂的联系。这种情况下,在一个包含 n 个元素的数据结构里,元素之间的最远距离就不是 n ,可能小得多。
树形结构也是由结点(结构中的逻辑单元,可用于保存数据)和结点之间的连接关系(一种后继关系)构成,但其结构与线性结构(表)不同,最重要的特征包括:
一个结构如果不空,其中就存在着唯一的一个起始节点,成为树根(root)
按结构的连接关系,树根外的其余结点都有且只有一个前驱(这点与线性结构一样),但另一方面,一个结点可以有 0 个或者多个后继(与线性结构不同)。另外,在非空的树结构中一定有些结点并不连接到其他结点。这种结点与表的尾节点性质类似,但在一个树结构里可以存在多个这种节点。
结构里的所有结点都在树根结点通过后继关系可达的结点集合里。换句话说说,从树根节点出发,经过若干次后继关系可以到达结构中的任一个结点;
结点之间的联系不会形成循环关系,这也就说明,结点之间的联系形成了一种序,但一般而言不像线性表那样形成一个全序;
从这种结构里的任意两个不同结点出发,通过后继关系可达的两个结点集合,或者互不相交,或者一个集合是另一个集合的子集;
当然也可以这样理解,根节点、左子树、右子树,三方面的内容,每个有两种状态,有或者无,共两种,因此 23=8,但要排除:
只有左子树;只有右子树;有左子树,右子树,但没有根;8 - 3 = 5,
数学归纳法进行证明, i→2i ⇒ i+1→2i⋅2=2i+1
20+21+⋯+2h=2h+1−12−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每棵二叉树有唯一的根节点,可以将其看作这棵二叉树的唯一标识(根之于二叉树,好比主键之于一条记录),是基于树结构的处理过程的入口(状态空间的初始状态)。也即从根节点出发,能找到树中所有信息,其基础是从父节点找到两个子节点。
因此,实际中常用二叉树的根节点代表这棵二叉树,其左右子树由它们各自的根节点代表。
二叉树 ⟺ 根 ⇒ (左子树,右子树)二叉树的每个结点可能保存一些数据,因此也是一种汇集型的数据结构。
