数据结构:树之二叉树(1)

一、二叉树的定义

1、定义

  二叉树中,每个结点的度不大于2,并且,二叉树的子树有左右之分,其次序不能任意颠倒。注意:二叉树只限制了度,而没有对结点的元素之间的顺序进行限定,空二叉树指没有结点的二叉树(在计算机里,存在一个树结构类型的指针,但是该指针指向NULL),而不是有根节点但是根结点没有结点元素。
  我们通常会对二叉树的结点按照从上到下、从左到右的顺序(层序)从1开始编号,这样就有了第i个结点的说法,但是需要注意的是:第i个结点并不意味着这个结点的元素是i,只是这个结点的序列是i,而这个结点的元素可以是任意数据。由于对二叉树度的限制,二叉树有了许多可以被量化探讨的性质,接下来将会介绍这些性质。

2、特殊的二叉树

(1)斜二叉树(Skewed Binary Tree)

  所有结点均只有左子树或右子树的二叉树叫做斜二叉树,斜二叉树的高度太高,不利于查找等操作,这个时候和线性表差不多。


斜二叉树

(2)完美二叉树(Perfect Binary Tree)/满二叉树(Full Binary Tree)

  完美二叉树和满二叉树一样,只是译法不同,通常使用满二叉树的叫法,对于一颗满二叉树而言,每一层的结点都填满了该层,也就是说第k层的结点数为2k-1,满二叉树如下图所示,少一个结点,多一个结点都不是满二叉树了。

满二叉树

  满二叉树平时用的也不是很多,用得更多的是接下来将要介绍的完全二叉树(Complete Binary Tree)。

(3)完全二叉树(Complete Binary Tree)

  完全二叉树可以看作是满二叉树的退化版本,比如说,上图的满二叉树去掉G结点,就是一颗完全二叉树,如果只去掉F结点而不同时去掉G结点,这个时候就不是完全二叉树了。
  关于完全二叉树的定义是这样的:有n个结点,这些结点按照从上到下、从左到右的顺序填充二叉树,最后得到的就是一颗完全二叉树。


完全二叉树

  完全二叉树更符合实际的情况,所以使用的很多。


二、二叉树的性质

  • 性质1二叉树的第i层上至多有2k-1个结点 (k≥1)。
      因为满二叉树每层的结点树实际上一个a1=1,公比为2的等比数列(a1对应第一层),所以这个很容易得出来。

  • 性质2 深度为k的二叉树至多有2k-1个结点 (k≥1)。
      等比数列求和可知深度为k的满二叉树有2k-1个结点,这个是最多结点的情况,所以性质2成立。

  • 性质3 对任何一颗二叉树 T,如果其叶结点数为n0,度为2的结点数为n2,则有n0=n2+1。

证明:
   设n1为该树中度为1的结点数,则树中边的总数en为
        en = n0 + n1 + n2 - 1
   考虑不同度对边的贡献有
        en = 0*n0 + 1*n1 + 2*n2
   所以有下式存在
        0*n0 + 1*n1 + 2*n2 = n0 + n1 + n2 - 1
   得到
       n0 = n2+1

  以上的3条性质对所有二叉树都成立,所以我在性质里将二叉树加粗了,接下来的性质就只针对于特定的二叉树成立,注意不要记混淆了。

  • 性质4 具有n个结点的完全二叉树的深度为[log2n]+1
      这条性质是针对完全二叉树的,因为满二叉树实际上也是一种完全二叉树,所以这条性质对满二叉树也成立。注意这里不是[log2(n+1)]+1

证明:
   根据性质2,深度为k的完全二叉树的结点总数n不超过2k-1,所以有
        2k-1-1 < n ≤ 2k-1或2k-1 < n ≤ 2k
   所以有
        k-1 < log2n ≤ k
   k为整数,因此
        k = [log2n]+1

  • 性质5
      如果对一颗有n个结点的完全二叉树的结点按层序编号,则对任一结点 i(1≤ i ≤ n),由
      (1)如果 i = 1,那么结点 i 是二叉树的根,无双亲;如果 i > 1,则其双亲的序列号为[i/2]。
      (2)如果 2i > n,则结点 i 没有左儿子 ,也没有右儿子(完全二叉树没有左儿子就一定没有右儿子);否则其左儿子的序列号为 2i。
      (3)如果 2i+1 > n,则结点 i 没有右儿子;否则其右儿子的序列号为 2i+1。
      性质5不展开证明,大家对照上面完全二叉树的图验证一下即可。

  性质4和性质5会经常用到,一定要记牢。下一篇将介绍二叉树的实现及遍历。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值