[转]【坐在马桶上看算法】算法10:二叉树--作者:ahalei

转载 2016年08月29日 17:18:07

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

105444xawrrrfk3arvcz4a.png 

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

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

105444lo3hqo7d75qi8pqn.png 

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

105444vaplv1en8nkl1zak.png 105444pk7odh7y5w8ck8od.png 105445rl0du14rrp533di3.png 

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

110107hi83hs8zpip39dk0.jpg 

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

110106m7do38qdzoiuisoq.jpg 

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

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

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

相关文章推荐

java里面的树型的使用

java,JTree

java:树的基本方法

package demo_tree; import java.util.Stack; public class BinaryTree { private class Node{ /** ...

java实现树

java实现一颗简单的树,提供树的基本功能,插入节点、获取树的深度等。

Linux内核分析(转自某大牛)

转载地址:http://blog.csdn.net/williamwanglei/article/details/10518811 启动     当PC启动时,Intel系列的CPU首...

重温数据结构:树 及 Java 实现

读完本文你将了解到: 什么是树 树的相关术语 根节点父亲节点孩子节点叶子节点如上所述 节点的度 树的度 节点的层次 树的高度 树的深度 树的两种实现 数组表示 链表表示的节点 树的几种常见分类及使用场...

Java递归应用:输出树形菜单

树节点类:package cn.com.tree; public class Node { private Integer id; private Integer parentId; priv...

java中的各个数据结构区别

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢...

【坐在马桶上看算法】算法10:二叉树

这位朋友写的特别好,忍不住转发 :-) http://ahalei.blog.51cto.com/4767671/1414035 二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边...

【坐在马桶上看算法】算法10:二叉树

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

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

坐在马桶上看算法:快速排序 2014-03-03 16:44 啊哈磊 51CTO博客 我要评论(0) 字号:T | T 算法的精髓在于,跟它一比高数也显得那么生动活泼…。本...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)