朝花夕拾 · 数据结构 | 二叉树篇

一.树的基本特性

二.二叉树

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,则有以下关系:

  1. 最后一个分支结点的编号为n/2(向下取整),若i≤n/2,则结点i为分支结点,否则为叶结点。
  2. 叶结点只可能在最后两层上出现(相当于在相同高度的满二叉树的最底层、最右边减少一些连续叶结点,当减少2个或以上叶结点时,次底层将出现叶结点)。
  3. 若有度为1的结点,则最多只可能有一个,且该结点只有左孩子而无右孩子(度为1的分支结点只可能是最后一个分支结点,其结点编号为n/2)。
  4. 按层序编号后,一旦出现某结点(如编号i)为叶结点或只有左孩子的情况,则编号大于i的结点均为叶结点(与结论1和结论3是相通的)。
  5. 若n为奇数,则每个分支结点都有左、右孩子;若n为偶数,则编号最大的分支结点(编号为n/2)只有左孩子,没有右孩子,其余分支结点都有左、右孩子。
  6. 当i>1时,结点i的双亲结点的编号为⌊i/2
  7. 若结点i有左、右孩子,则左孩子编号为2i,右孩子编号为2i+1。
  8. 结点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.层序遍历

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值