树、二叉树、遍历二叉树的总结
2016-05-08 11:40
260 查看
首先介绍树:
![](http://img.blog.csdn.net/20160508114205406)
如上图所示就是一棵树,先介绍树的几个关键名词:
节点:A、B、C、D等都叫节点
节点的度:节点有几个分支,就叫节点的度,比如节点B有2个分支,那B的度为2
终端节点(叶子):没有分支的节点,如E、F、G、H
非终端节点:有分支的节点,如A、B、D、C
节点的层次:自上而下排列层次,A为1层,B为2层,D为3层
树的度:哪个节点的度最大,这个最大的度就是树的度,如图树的度为2
树的深度:简而言之,就是树有几层,如图的树的深度为4
我们接触最多的树是二叉树
二叉树:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
二叉树的5种基本形态:
![](http://img.blog.csdn.net/20160508114403130)
注意:(a)的意思是二叉树没有任何节点
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上。
![](http://img.blog.csdn.net/20160508114445375)
假如满二叉树有K层,那么他总结点数是:2^k-1,第k层的结点数是:2^(k-1)
完全二叉树:若设二叉树的深度为k,除第k 层外,其它各层(1~k-1)的结点数都达到最大个数,第
k 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树是指最后一层左边是满的,右边可能满也可能不满,然后其余层都是满的。可以这么看完全二叉树:对满二叉树的最后一排自右往左剪叶子。
![](http://img.blog.csdn.net/20160508114557086)
平衡树
二叉树是一种非平衡树,各个子树之间的高度可能相差很大,这样就造成平均性能的下降。为了使各个子树的高度基本保持平衡,平衡树就应运而生了。
平衡树包括很多种类,常见的有B树、AVL树、红黑树等。B树主要应用于文件系统、数据库等方面,而AVL树和红黑树多用于检索领域。
红黑树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1.
节点是红色或黑色。
性质2.
根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
![](http://img.blog.csdn.net/20160508114704447)
红黑树
二叉树的遍历:
先序遍历:根左右,首先访问根结点,然后遍历左子树,最后遍历右子树
中序遍历:左根右,首先遍历左子树,然后访问根结点,最后遍历右子树
后序遍历:左右根,首先遍历左子树,然后遍历右子树,最后访问根结点
可以看出,前序、中序、后序分别是以根的位置来命名的,比如“根左右”,根最前,所以命名为前序;“左根右”,根排第二,所以叫中序。也可以这么理解:“根”“左”“右”分别是三种东西,谁排前头谁就先遍历谁。值得注意的是,“左”一定比“右”拍的靠前。
小试牛刀:
![](http://img.blog.csdn.net/20160508114757252)
如上图
前序遍历:FCADBEGHP
中序遍历:ACBDFEHGP
后序遍历:ABDCHPGEF
再来一个复杂的:
![](http://img.blog.csdn.net/20160508114830439)
如上图
前序遍历:ABMCDEFGHK
中序遍历:MBDCAEHGKF
后序遍历:MDCBHKGFEA
如上图所示就是一棵树,先介绍树的几个关键名词:
节点:A、B、C、D等都叫节点
节点的度:节点有几个分支,就叫节点的度,比如节点B有2个分支,那B的度为2
终端节点(叶子):没有分支的节点,如E、F、G、H
非终端节点:有分支的节点,如A、B、D、C
节点的层次:自上而下排列层次,A为1层,B为2层,D为3层
树的度:哪个节点的度最大,这个最大的度就是树的度,如图树的度为2
树的深度:简而言之,就是树有几层,如图的树的深度为4
我们接触最多的树是二叉树
二叉树:在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
二叉树的5种基本形态:
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上。
假如满二叉树有K层,那么他总结点数是:2^k-1,第k层的结点数是:2^(k-1)
完全二叉树:若设二叉树的深度为k,除第k 层外,其它各层(1~k-1)的结点数都达到最大个数,第
k 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树是指最后一层左边是满的,右边可能满也可能不满,然后其余层都是满的。可以这么看完全二叉树:对满二叉树的最后一排自右往左剪叶子。
平衡树
二叉树是一种非平衡树,各个子树之间的高度可能相差很大,这样就造成平均性能的下降。为了使各个子树的高度基本保持平衡,平衡树就应运而生了。
平衡树包括很多种类,常见的有B树、AVL树、红黑树等。B树主要应用于文件系统、数据库等方面,而AVL树和红黑树多用于检索领域。
红黑树
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1.
节点是红色或黑色。
性质2.
根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5.
从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
二叉树的遍历:
先序遍历:根左右,首先访问根结点,然后遍历左子树,最后遍历右子树
中序遍历:左根右,首先遍历左子树,然后访问根结点,最后遍历右子树
后序遍历:左右根,首先遍历左子树,然后遍历右子树,最后访问根结点
可以看出,前序、中序、后序分别是以根的位置来命名的,比如“根左右”,根最前,所以命名为前序;“左根右”,根排第二,所以叫中序。也可以这么理解:“根”“左”“右”分别是三种东西,谁排前头谁就先遍历谁。值得注意的是,“左”一定比“右”拍的靠前。
小试牛刀:
前序遍历:FCADBEGHP
中序遍历:ACBDFEHGP
后序遍历:ABDCHPGEF
再来一个复杂的:
如上图
前序遍历:ABMCDEFGHK
中序遍历:MBDCAEHGKF
后序遍历:MDCBHKGFEA
相关文章推荐
- ios基础知识--03
- Vesions ignore & ld: library not found for -l问题总结
- android 性能优化之布局优化-----ViewStub
- 汇编02
- ios基础知识--02
- 俞敏洪一分钟励志演讲稿
- 信用卡负债率相关信息
- MindManager9打开模板参数错误解决方式
- 20145122 《Java程序设计》第十周学习总结
- JAVA连接SQL数据库,并以表格形式输出所有列
- Handler+Timer/TimerTask实现ViewPager的自动循环播放
- iOS开发之多XIB之间相互关联
- java学习总结(16.05.08)在windows下使用cmd命令行对java文件进行编译和执行
- python 字典转对象
- 学习笔记之深入浅出MFC 第9章 仿真MFC之二
- nodejs01--什么是nodejs,nodejs的基本使用
- 一起写一个 Web 服务器(1)
- apk文件的反编译方法:
- 汇编01
- 第十一周