满二叉树和完全二叉树的区别

二叉树分类很多,其中有满二叉树和完全二叉树,这两种二叉树的效率都很高,但它们之间也有不同,那它们之间的区别是什么呢?

满二叉树

顾名思义,满二叉树指每一层都达到了最大节点数的二叉树,也就是深为 k 且有 2k-1 个节点的二叉树。它可以按从左到右、从上到下的顺序编号,如图 1 所示。

图 1:满二叉树

完全二叉树

在深度为 k 的完全二叉树中,所有的节点也按从左到右、从上到下的顺序编号。每个节点的编号都与深度为 k 的满二叉树中相应位置的节点一一对应。图 2 所示为完全二叉树。

图 2:完全二叉树

正因这样的性质,完全二叉树的叶子节点只出现在最底部的两层,而左右子树的深度要么相等,要么相差 1。同样,可以推出,当完全二叉树有 n 个节点时,它的深度为  ,这里  表示向下取整。

 

设 k 为完全二叉树的深度,那么:
2k-1-1<n≤2k-1,n为整数
2k-1≤n<2k
k-1≤log2n<k
k=log2n+1

我们还可以观察到,在完全二叉树中,父亲节点和孩子节点的编号有着一定的关系。如图 3 所示,当父亲节点的编号为 i 时,左孩子节点的编号为 2i,右孩子节点的编号为 2i+1。

图 3:节点之间的编号关系

 

 

根据这个规律,我们也可以推出,当某个节点的编号为 i 时,它的父亲节点编号为 [i/2]。

在 Python 中,最常见的二叉树存储方法是顺序存储。当把二叉树存储在顺序列表中时,下标即为节点的编号,而元素本身则是节点所存储的数据。比如说,T[2]=3 表示把编号为 2 的节点存储的元素赋值为 3。这时候,我们可以通过上面讲到的父亲孩子节点编号之间的关系来实现遍历等功能。同时,正因为这个性质,根节点在列表中的下标必须大于 0。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值