分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net

完全二叉树是一种效率很高的数据结构,堆就是一种完全二叉树,效率极高。像十分常用的排序算法、Dijkstra算法、Prim算法等等都要用堆才能优化;经常提到的二叉排序树的效率也要借助平衡性来提高,而平衡性基于完全二叉树。

完全二叉树(CompleteBinaryTree)的定义

若设二叉树的高度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,且第h层所有的节点都连续集中在最左边,这就是完全二叉树。

完全二叉树是由满二叉树而引出来的。对于深度为K,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

若一棵二叉树至多只有最下面两层的结点的度数可以小于2,并且最下层的结点都集中在该层最左边的若干位置上,则此二叉树为完全二叉树。

完全二叉树的特点

叶子结点只可能在最下面的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L或L+1;

出于简便起见,完全二叉树通常采用数组而不是链表存储,其存储结构如下:

vartree:array[1...n]ofobject;{n:integer;n>=1}

对于tree,有如下特点:

(1)若i为奇数且i>1,那么tree[i]的左兄弟为tree[i-1];

(2)若i为偶数且i(3)若i>1,tree[i]的双亲为tree[idiv2];

(4)若2*i<=n,那么tree[i]的左孩子为tree[2*i];若2*i+1<=n,那么tree[i]的右孩子为tree[2*i+1];

(5)若i>n/2,那么tree[i]为叶子结点(对应于(3));

(6)若i

(7)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树;

(8)完全二叉树第i层至多有2^(i-1)个节点,共i层的完全二叉树最多有2^i-1个节点。

完全二叉树叶子结点数的算法

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,而n=n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n=2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2,就可根据完全二叉树的结点总数计算出叶子结点数。

完全二叉树的性质

具有n个结点的完全二叉树的深度为floor(log2n)+1或ceil(log2(n+1))。

证明:设所求完全二叉树的深度为k。

由完全二叉树定义可得:

深度为k得完全二叉树的前k-1层是深度为k-1的满二叉树,一共有2^(k-1)-1个结点。

由于完全二叉树深度为k,故第k层上还有若干个结点,因此该完全二叉树的结点个数:n>2^(k-1)-1。

由二叉树的性质可知:n≤2^(k)-1,即:2^(k-1)-1由此可推出:2^(k-1)

由于k-1和k是相邻的两个整数,故有k-1=floor(log2n),由此即得:k=floor(log2n)+1。



python中node_size是什么意思_python里二叉树pop_node=q.pop(0)什么意思?相关推荐

  1. python中str是什么函数_python里的str是什么函数

    python里的str是什么函数 发布时间:2020-05-18 11:39:40 来源:亿速云 阅读:280 作者:小新 今天小编给大家分享的是python里的str是什么函数,相信很多人都不太了解 ...

  2. python中fd是什么意思_python里fd是什么意思

    文件描述字(file descriptor,fd)是系统中用来唯一记录当前已经打开的文件的标识号,fd是一个整数. 除了file对象外,Python还提供对fd的操作,对fd的操作更加底层,fd和Py ...

  3. python中re是什么意思_python里的re是什么

    定义 正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配.re模块使得python拥有全部的正则表达式功能. 用途 通过使用正则表达式,可以: 测试字符串内的模式.-- 例如,可 ...

  4. python中append是什么意思_python里append是什么

    python中的append()函数是在列表末尾添加新的对象,且将添加的对象最为一个整体.与append相对应的是extend函数. 网上有很多对这两个函数的区别讲解,但我觉得都讲的不是很清楚,记忆不 ...

  5. python中lines是什么类型_python里的splitlines详解

    Python的split方法函数可以分割字符串成列表,默认是以空格作为分隔符sep来分割字符串. In [1]: s = "www jeapedu com" In [2]: pri ...

  6. python中format是啥意思_python里format什么意思

    详细内容 format是python2.6新增的一个格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能替代字符串类型(推荐学习:Python视 ...

  7. python中lt是什么意思_python里的tplt什么意思 Python的format格式化输出

    Python的格式化输出 方法一:传统方法 与C语言类似,可以采用"%"作为格式化输出的标记.如: print("The first number: %5d, the s ...

  8. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  9. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

最新文章

  1. 在ubuntu 16.04下安装gitlab(摘抄中文官方网站)
  2. MailScanner相关规则设置
  3. zabbix mysql 查询,Zabbix4.4配置MySQL监控;
  4. [渝粤教育] 西南科技大学 经济学概论 在线考试复习资料
  5. C语言课程设计学生籍贯信息,C语言课程设计 学生籍贯信息记录簿设计.doc
  6. SQL语句操作优先级顺序
  7. struts2:数据标签
  8. Private strand flush not complete 说明
  9. 生产者消费者模型-管程法(Java)
  10. wp8.1 全球化解决办法
  11. MTK通信物料供应表MT7621AT,MT7620A,WIFI6,MT7975D+MT7905D
  12. laravel 框架使用hdjs 实现富文本编辑器功能
  13. 2015阿里巴巴校招在线笔试题
  14. 固定资产盘点常用的方法,你了解多少?
  15. 响应式布局的个人博客
  16. Ubuntu 修改用户名
  17. HTTP协议浅析(中):请求报文和响应报文
  18. python 量化交易 库_量化投资的Python库——Tushare
  19. 小小树莓派鉴黄初体验 OpenNSFW on RPi
  20. 安卓ROOT权限,挎包获取database数据app开发

热门文章

  1. Uber的启动画面是如何制作的
  2. matlab 轴系校中,轴系校中简介.ppt
  3. 假期培训总结——初三寒假
  4. 深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)
  5. webfont.woff2和webfont.woff下载超时报404错误
  6. 围绕开源的系列思考之二——企业篇
  7. 让View具有减速效果的动画——FlingAnimation
  8. IIS 发生意外错误 0x8ffe2740
  9. 恢复桌面计算机图标不见了怎么办,桌面的图标不见了怎么恢复,桌面图标不见了怎么办...
  10. Mysql数据库轻松学06—数据分析师常用:数据查询语言DQL之单表查询