在学习新内容之前,让我们先来回顾一下数据的逻辑结构都有哪些吧!
一.树型结构:
1.结点之间有分支
2.具有层次关系
1.树的定义
树是n个结点的有限集。
若n=0,称为空树;
若n>0,则它满足如下两个条件
①有且仅有一个特定的称为根的结点
②其余结点可分为m个互不相交的有限集,其中每一个集合本身又是一棵树,并称为根的子树
树有几种表示形式
可以看出:树的定义是一个递归的嵌套的定义。
2.树的常见术语
概念 | 含义 |
---|---|
根结点 | 非空树中无前驱结点的结点 |
结点的度 | 结点拥有的子树数 |
树的度 | 树内各节点的度的最大值 |
叶子结点 | 度为0的结点叫做叶子结点(终端结点) |
分支结点 | 度不为0的结点叫做分支结点(非终端结点)。 |
内部结点 | 根结点以外的分支结点称为内部结点 |
结点的孩子,双亲,兄弟,堂兄弟 | 结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。如果有共同的双亲,就是兄弟结点。同一层是堂兄弟 |
结点的祖先 | 从根到该结点所经分支上的所有结点 |
结点的子孙 | 以某节点为根的子树中的任一结点 |
树的深度 | 树中结点的最大层次 |
有序树 | 树中结点的各子树从左至右有次序(最左边的为第一个孩子) |
无序树 | 树中结点的各子树无次序 |
森林 | 是m棵互不相交的树的集合(m大于等于0 |
其实,将根结点删除,树就变成了森林。所以一棵树可以看成是一个特殊的森林,但是森林不一定是树
3.树和线性结构的比较
4.1树的案例1数据压缩问题
将数据文件转换成由0、1组成的二进制串,称之为编码
4.2树的案例2利用二叉树求解表达式的值
二.二叉树
在说明二叉树的定义之前,我们先来聊一聊为什么要用二叉树
①普通树若不转化为二叉树,则运算很难实现
②二叉树的结构最简单,规律性最强
③可以证明,所有树都能转为唯一对应的二叉树,不失一般性。
二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而且任何树都可以与二叉树相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。
1.定义
二叉树是n个结点的有限集,它或者是空集(n=0),或者由一个根节点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。
2.特点:
①每个结点最多有俩孩子(二叉树中不存在度大于2的结点)
②子树有左右之分,其次序不能颠倒
③二叉树可以是空集合,根可以有空的左子树或空的右子树
3.注意:
严格来说,二叉树不是树的特殊情况,他们是两个概念。
二叉树结点的子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树还是右子树。
树当结点只有一个孩子时,就无须区分它是左还是右的次序。因此,二者是不同的,这是二叉树与树的最主要的区别。
也就是说二叉树每个结点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而树的结点位置是相对于别的结点来说的,没有别的结点时,它就无所谓左右了。
所以二叉树不是树,更不是有序树。