二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递 归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。

二叉树的使用范围最广,一棵多叉树也可以转化为二叉树,因此我们将着重讲解二叉树。

二 叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉树。如果二叉树中每个内部结点都有两个儿子,这样的二叉树叫做满二叉树。或者说满二叉树所有的叶结点 都有同样的深度。比如下面这棵二叉树,是不是感觉很“丰满”。满二叉树的严格的定义是一棵深度为h且有2h-1个结点的二叉树。

如果一棵二叉树除了最右边位置上一个或者几个叶结点缺少外其它是丰满的,那么这样的二叉树就是完全二叉树。严格的定义是:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,就是完全二叉树。也就是说如果一个结点有右子结点,那么它一定也有左子结点。例如下面这三棵树都是完全二叉树。其实你可以将满 二叉树理解成是一种特殊的或者极其完美的完全二叉树。

  

其实完全二叉树类似下面这个形状。

说到这里我们马上就要领略到完全二叉树的魅力了。先想一想一棵完全二叉树如何存储呢?其实完全二叉树中父亲和儿子之间有着神奇的规律,我们只需用一个一维数组就可以存储完全二叉树。首先将完全二叉树进行从上到下,从左到右编号。

通过上图我们发现如果完全二叉树的一个父结点编号为k,那么它左儿子的编号就是2*k,右儿子的编号就是2*k+1。如果已知儿子(左儿子或右儿子)的编号是x,那么它父结点的编号就是x/2,注意这里只取商的整数部分。在C语言中如果除号‘/’两边都是整数的话,那么商也只有整数部分(即自动向下取整),即4/2和5/2都是2。另外如果一棵完全二叉树有N个结点,那么这个完全二叉树的高度为log2 N简写为log N,即最多有log N层结点。完全二叉树的最典型应用就是——堆。那么堆又有什么作用呢?请关注下周更新:堆——神奇的优先队列。

欢迎转载,码字不容易啊,转载麻烦注明出处

【啊哈!算法】算法10:二叉树 http://ahalei.blog.51cto.com/4767671/1414035

本文转自    风雨萧条 博客,原文链接:  http://blog.51cto.com/1095221645/1417939      如需转载请自行联系原作者

【坐在马桶上看算法】算法10:二叉树相关推荐

  1. 坐在马桶上看算法:Dijkstra最短路算法

                                                             [坐在马桶上看算法]算法7:Dijkstra最短路算法 上周我们介绍了神奇的只有五行的 ...

  2. 坐在马桶上看算法:只有五行的Floyd最短路算法

    坐在马桶上看算法:只有五行的Floyd最短路算法 此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在"Communications of the ACM" ...

  3. 坐在马桶上看算法:快速排序

    坐在马桶上看算法:快速排序<?xml version="1.0" encoding="UTF-8"?> 坐在马桶上看算法:快速排序    高快省的排 ...

  4. 【坐在马桶上看算法】排序总结:小哼买书

    之前讲了三种常用的经典排序.排序算法还有很多,例如选择排序.计数排序.基数排序.插入排序.归并排序和堆排序等等.堆排序是基于二叉树的排序,以后再说吧.先分享一个超酷的排序算法的视频. 再来看一个具体的 ...

  5. 【坐在马桶上看算法】算法4:队列——解密QQ号

    新 学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的.所以小哈给了小哼一串加密过 的数字,同时小哈也告诉了小哼解密规则.规则是这样的 ...

  6. 【坐在马桶上看算法】啊哈算法13:零基础彻底弄懂“并查集“

    并查集 题目描述 分析 并查集模板 因为最近在学并查集,在别的博客看到关于并查集的知识点,讲解得很清晰,理解更深,所以搬运到csdn来分享一下好资源. 题目描述 快过年了,犯罪分子们也开始为年终奖&q ...

  7. 【坐在马桶上看算法】算法4:队列――解密QQ号

    新 学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的.所以小哈给了小哼一串加密过 的数字,同时小哈也告诉了小哼解密规则.规则是这样的 ...

  8. 坐在马桶上看算法:快速排序(过程图解)

    比较了好多"快排"的解说,还是这个"哨兵"的方式最容易理解. 虽然文章通篇文字没什么图片,也没什么色彩,但是一定要坚持看完整篇文章,真的会豁然开朗,心情超爽!! ...

  9. 沃舍尔算法_坐在马桶上看算法:只有五行的Floyd最短路算法

    暑假,小哼准备去一些城市旅游.有些城市之间有公路,有些城市之间则没有,如下图.为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程. 上图中有4个城市8条公路,公路上的数字表 ...

最新文章

  1. Asp.Net Core 入门(一)——Program.cs做了什么
  2. 【C语言】关于结构体最后的长度为0或1数组的思考
  3. 来看看CDN网络安全防护的方案
  4. Jensen不等式及其证明
  5. Qt工作笔记-第一个QML(QQuickView显示QML文件)
  6. idea展示runDashboard的窗口
  7. 深度学习—大厂笔试题
  8. linux下vhd win10,利用win10纯净版系统的VHD虚拟硬盘安装win10系统的方法
  9. 洛谷P1402 酒店之王
  10. js 控制滚动条位置
  11. 智慧教育教学案例分析
  12. 软考计算机评职称,软考通过后如何评职称?
  13. 饭后Android 第二餐-复选框CheckBox+开关按钮Switch+单选按钮RadioButton
  14. 10000电信固话如何设置呼叫转移
  15. PVE最小资源安装Jellyfin(LXC容器使用turnkey-mediaserver模板)
  16. 用新浪SAE免费搭建自己的应用
  17. php 加载慢,解决php加载慢的一个办法_PHP教程
  18. 荣耀7c升鸿蒙,荣耀也能升级!鸿蒙所需配置曝光:麒麟710起步
  19. 企业如何建设网站之基础建站教程
  20. 狗为什么吃屎?真相男默女泪,但看完后你也会流口水......

热门文章

  1. linux100day(day5)--编程原理和shell脚本
  2. 示范对外接口参数文档
  3. bzoj 3675: [Apio2014]序列分割
  4. LINUX 对引导加密
  5. python随机验证码函数
  6. ADO.NET中的五个主要对象
  7. linux 安装vbox增强工具
  8. windows系统-程序加载时生成栈和堆的过程
  9. C#操作快捷方式(获取快捷方式属性、创建快捷方式)
  10. WindowsService服务程序开发