学好数据结构和算法 —— 非线性结构(中)

树是一种很常见的分线性数据结构,公司的组织架构,行政区划结构等都是树形结构。树形结构里常见的有树和二叉树。

树的定义

树是n(n>=0)个结点的有限集。

在任意一棵非空树中:

(1)有且仅有一个特定的称为根(root)的结点

(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,称为根的子树(递归的过程)

学好数据结构和算法 —— 非线性结构(中)

如上图所示:

图3-1是n=0的树;

图3-2是n=1只有一个根节点的树;

图3-3是一棵普通的树,B为根节点的树T1 = {B,E,F,J} 是A的子树,B为T1的根节点,同时也有自己的子树。

树的3种表示方法

学好数据结构和算法 —— 非线性结构(中)

如图所示的树有以下3中表示方法:

学好数据结构和算法 —— 非线性结构(中)

其中1是集合形式看起来很清晰;2是层级表示方式,类似书的目录;3是一种广义表的表示方法。

树的一些概念

结点:包含一个数据元素 及 若干指向其子树的分支。

例如结点B,包含了结点数据B 和 指向子树E和F的分支。

:结点拥有的子树数称为结点的度。

例如:结点B包含了两个子树,度为2;结点D包含了3个子树,度为3.

叶子(终端结点):度为0的结点(没有子树的结点)

  例如:J、F、C、G、H、I都是树的叶子。

分支结点(非终端结点):度不为0的结点(有子树的结点)。除了根节点外,分支结点也成为内部结点。

  例如:A、B、E、D为分支结点;B、E、D为内部结点。

树的度:树内各个结点的度的最大值。

  例如:A的度为3;B的度为2;D的度为3,其余结点度为0,所以树的度为3。

孩子:结点的子树称为结点的孩子,反过来,该节点称为孩子的双亲

  例如:结点A有B、C、D 3个孩子,A是B、C、D的双亲结点。

兄弟:同一双亲的孩子互为兄弟。

祖先从根节点到某个结点(N)经历的所有结点称为该节点(N)的祖先;反之,以某结点(N)为根的任一结点都是该节点(N)的子孙

堂兄弟:双亲结点在同一层的结点互为堂兄弟。

  例如:E 和 G、H、I为堂兄弟。

结点的层次:结点的层次是从根节点开始,根为第一层,依次递增,所以上面树的结点A在第1层,J在第4层。如果结点在n层,其子树(如果有子树)就在第n+1层。

树的深度(高度):树种结点的最大层次称为树的深度(Depth)或高度。上面树的深度为4。

有序树:如果树中结点的各子树从左到右是有次序的(即不能互换),则次树是有序树;反之,则为无序树

2、二叉树(Binary Tree)

二叉树是一种有限制的树,每个结点最多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,次序不能任意颠倒。

可以简单理解为:二叉树是一棵任意结点度不大于2的有序树。

二叉树有以下5中结构:

学好数据结构和算法 —— 非线性结构(中)

1:空二叉树;

2:只有根节点的二叉树;

3:右子树为空的二叉树;

4:左右子树均非空的二叉树;

5:左子树为空的二叉树

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwwx.html