一.树的基本特性

二.二叉树
1.定义

2.几种特殊的二叉树

3.二叉树的基本性质
1)非空二叉树上的叶结点数等于度为2的结点数加1,即n0=n2十1。
证明:设度为0,1和2的结点个数分别为n0,n1和n2,结点总数n=n0+n1+n2。再看二叉树中的分支数,除根结点外,其余结点都有一个分支进入,设B为分支总数,则n=B+1。这些分支是由度为1或2的结点射出的,因此又有B=n1+2n2。
于是得n0+n1+n2=n1+2n2+1,则n0=n2+1。2)非空二叉树的第k层最多有2^(k-1)个结点(k≥1)。
第1层最多有2^(1-1)=1个结点(根),第2层最多有2^(2-1)=2个结点,以此类推,可以证明
其为一个公比为2的等比数列2^(k-1)。
3)高度为h的二叉树至多有2^h-1个结点(h≥1)。
该性质利用性质2求前h项的和,即等比数列求和的结果性质2和性质3还可以拓展到m叉树的情况,即m叉树的第k层最多有m^(k-1)个结点,高度为h的m叉树至多有(m^h-1)/(m-1)个结点。
性质4相对不常用,感兴趣了解即可。
4)对完全二叉树按从上到下、从左到右的顺序依次编号1,2,...,n,则有以下关系:
- 最后一个分支结点的编号为
⌊n/2⌋(向下取整),若i≤⌊n/2⌋,则结点i为分支结点,否则为叶结点。- 叶结点只可能在最后两层上出现(相当于在相同高度的满二叉树的最底层、最右边减少一些连续叶结点,当减少2个或以上叶结点时,次底层将出现叶结点)。
- 若有度为1的结点,则最多只可能有一个,且该结点只有左孩子而无右孩子(度为1的分支结点只可能是最后一个分支结点,其结点编号为
⌊n/2⌋)。- 按层序编号后,一旦出现某结点(如编号i)为叶结点或只有左孩子的情况,则编号大于i的结点均为叶结点(与结论1和结论3是相通的)。
- 若n为奇数,则每个分支结点都有左、右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点都有左、右孩子。
- 当i>1时,结点i的双亲结点的编号为
⌊i/2⌋。- 若结点i有左、右孩子,则左孩子编号为2i,右孩子编号为2i+1。
- 结点i所在层次(深度)为
⌊log2 i⌋+1。5)具有n个(n>0)结点的完全二叉树的高度为
⌈log2(n+1)⌉或⌊log2n⌋+1。
设高度为h,根据性质3和完全二叉树的定义有
2^(h-1)<n≤2^h-1 或者 2^(h-1)≤n<2^h
得2^(h-1)< n+1 ≤ 2^h,即h-1 < log2(n+1) ≤ h,因为h为正整数,所以h=⌈log2(n+1)⌉,
或者得h-1≤ log2n < h,所以h=⌊log2n⌋+1。
4.二叉树的遍历
1.先序遍历
2.中序遍历
3.后序遍历
上述三种遍历算法中,递归遍历左、右子树的顺序都是固定的,只是访问根结点的顺序不同。不管采用哪种遍历算法,每个结点都访问一次且仅访问一次,所以时间复杂度都是O(n)。在递归遍历中,递归工作栈的栈深恰好为树的深度,所以在最坏情况下,二叉树是有n个结点且深度为n的单支树,遍历算法的空间复杂度为O(n)。
4.层序遍历





980

被折叠的 条评论
为什么被折叠?



