<数据结构与算法>之二叉树初看
来源:互联网 发布:php工程师岗位职责 编辑:程序博客网 时间:2024/05/29 12:47
二叉树是很基本的数据结构,但是以前都是为了应付考试,初略的觉得自己明白了,但是每次刷题或者code的时候,基础还是硬伤。以前也会接触关于二叉树的知识点,没有及时总结消化,还是吃亏了。
我在网上了google了很多关于二叉树的资料,这里我就贴上一个链接,是自己觉得很不错一位po主的博客,关于数据结构和算法系列的内容很详细,语言也涉及了C,C++和java,我自己这里就只涉及java版本的吧。但是这里主要是二叉树的一些基本概念和性质,关于具体的java实现参考二叉查找树或者二叉排序树的内容。
(http://www.cnblogs.com/skywang12345/p/3603935.html)
1. 基本概念
什么是二叉树
二叉树的子树有左右之分,并且次序不能任意颠倒。二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决。
二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。
二叉树不是树的一种特殊情形,尽管其与树有许多相似之处,但树和二叉树有两个主要差别:
<1> 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;<2> 树的结点无左、右之分,而二叉树的结点有左、右之分
二叉树的性质
<1> 二叉树中,第i层的节点最多有2(i-1)个。 <2> 深度为k的二叉树最多有2k-1个节点。 <3> 二叉树中,叶子节点树为N1个,度为2的节点有N2个,那么N1=N2+1。 <4> 具有N个结点的二叉树深度为(Log2 N)+1层。 <5> N个结点的完全二叉树如何用顺序存储,对于其中的一个结点i,存在以下关系, 2*i是结点i的父结点。 i/2是结点i的左孩子。 (i/2)+1是结点i的右孩子。
二叉树存储
有两种方式:顺序储存和链式存储
顺序存储的缺点:因为顺序存储一般适合在完全二叉树的情况,如果不是完全二叉树的话,必须将其转化为“完全二叉树”,将空的节点可以用“#”代替,造成很多空间浪费。
链式储存:一个结点存放着一个“左指针”和一个“右指针”,这就是二叉链表。如何方便的查找到该结点的父结点,可以采用三叉链表
术语
其实树中有很多术语的,这个是我们学习树形结构必须掌握的。
<1> 父节点,子节点,兄弟节点:B和C的父节点就是A,反过来说就是B和C是A的子节点。B和C就是兄弟节。 <2> 结点的度:其实”度“就是”分支数“,比如A的分支数有两个“B和C",那么A的度为2。 <3> 树的度:他和”结点的度“的区别就是,树的度讲究大局观,乃树中最大的结点度,其实也就是2。 <4> 叶结点,分支结点: 叶结点就是既没有左孩子也没有右孩子结点,也就是结点度为0。分支节点也就是if的else的条件咯。 <5> 结点的层数: 就是树有几层。 <6> 有序树,无序树:有序树我们先前也用过,比如“堆”和“二叉排序树”,说明这种树是按照一定的规则进行排序的,else条件就是无序树。 <7> 森林:现实中,很多的树形成了森林,那在数据结构中,我们把上图的“A”节点砍掉,那么B,C子树合一起就是森林咯。
树的表示:树这个结构的表示其实有很多种,常用的也就是“括号”表示法。比如上面的树就可以表示为:(A(B(D),(E)),(C(F),(G)))
二叉树分类
<1> 二叉排序树: 其实”度“就是”分支数“,比如A的分支数有两个“B和C",那么A的度为2。 <2> 满二叉树:除叶子节点外,所有节点的度都为2,文章开头处的树就是这里的“满二叉树”。 <3> 完全二叉树:满足两个条件:1)把最后一层去掉,就是满二叉树了;2)最后一层的叶子节点必须是从左往右依次排开。 <4>二叉查找树: 1) 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2) 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 3) 任意节点的左、右子树也分别为二叉查找树。 4) 没有键值相等的节点(no duplicate nodes)。 **关于二叉查找树具体API可以参考另一篇博客。 <5> 线索二叉树:
2. 二叉树API
- <数据结构与算法>之二叉树初看
- 数据结构与算法之二叉树遍历
- 数据结构与算法之二叉树
- 算法与数据结构之二叉树
- 数据结构与算法之二叉树
- 数据结构与算法04 之二叉树
- 数据结构与算法之二叉树
- <数据结构与算法>之二叉查找树
- 数据结构与算法之八(二叉树)
- 数据结构与算法之 二叉树 (一)递归算法
- 数据结构与算法之树与二叉树
- 《数据结构与算法》之二叉树的性质
- 数据结构与算法之二叉树+遍历+哈夫曼树
- 数据结构与算法之搜索二叉树<五>
- 数据结构与算法分析之平衡二叉树的建立
- 数据结构与算法之二叉树的遍历方式
- 数据结构与算法之树&二叉树的定义
- 数据结构与算法之二叉树的Python简单实现
- 在浏览器中输入网址到网页展现全部过程
- SpringBoot 实战 (一) :如何创建SpringBoot项目 --入门篇
- 【iOS】渐变水波 YAWaveView
- MIT HAKMEM算法
- 利用随机森林对特征重要性进行评估
- <数据结构与算法>之二叉树初看
- SQL基本操作语句
- 【03】淘淘商城-规格参数展示
- linux查找命令
- css3中强大的rem单位
- test
- 深度剖析什么是 SLI、SLO和SLA?
- List转Map
- Java-Swing嵌入浏览器