(七)神奇的树 —— 2. 二叉树

2. 二叉树

二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。

二叉树中还有两种特殊的二叉树,叫做满二叉树和完全二叉树。


如果二叉树中每个内部结点都有两个儿子,这样的二叉树叫做满二叉树。或者说满二叉树所有的叶结点都有同样的深度。

满二叉树的严格的定义是,一棵深度为h且有 2 h 2^h 2h-1 个结点的二叉树。

完全二叉树严格的定义是:若设二叉树的高度为h,除第h层外,其他各层(1~h-1)的结点数都达到最大个数,第h层从右向左连续缺若干结点,则这个二叉树就是完全二叉树。

例如下面这三棵树都是完全二叉树:


一棵完全二叉树如何存储呢? 只需用一个一维数组就可以存储完全二叉树。

首先将完全二叉树进行从上到下,从左到右编号。

通过上图发现,如果完全二叉树的一个父结点编号为k,那么它左儿子的编号就是2k,右儿子的编号就是2k+1。

如果已知儿子(左儿子或右儿子)的编号是x,那么它父结点的编号就是x/2,注意这里只取商的整数部分。

另外,如果一棵完全二叉树有N个结点,那么这个完全二叉树的高度为 l o g 2 N log_{2}N log2N, 简写为logN,即最多有logN层结点。





参考

《啊哈!算法》 —— 第7章 神奇的树

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值