树是一种非线性结构。
目录
树
引入:
定义:
而子树本身又是一个树,又可以看成是由一个根和其它元素所构成的集合组成的。所以很容易看出来,树的定义是一个递归的定义,也就是说它的结构是递归的,所以在后面我们对树进行操作的时候,往往要用到递归的算法。
如图:
树的其他表示方式:
最常用的形式还是最中间的那种树型。
树的基本术语:
树的深度:树中结点的最大层次。如上图树最大层次为第4层,所以该树的深度为4,有时候树的深度也称作树的高度,即这棵树的高度为4。
有序树:树中结点旳各子树从左至右有次序(最左边的为第一个孩子),即如果将T1,T2,T3的位置给换一下的话,就成另外一棵树了,也就不是这棵树了。
无序树:树中结点旳各子树无次序。
森林:
上图那棵树也是一个森林,只不过是一个只包含一颗树的森林,那如果将根结点A去掉,就变成了一个有三棵树的森林。
像这样:
这是一个包含三棵树T1,T2,T3的森林。
树结构和线性结构的比较:
二叉树:
引入:
定义:
特点:
每个结点最多有两个孩子(二叉树中不存在度大于2的结点)。
子树有左右之分,其次序不能颠倒。
二叉树可以是空集合,根可以有空的左子树和空的右子树。
特别注意:
二叉树不是树的特殊情况,它们是两个概念。
二叉树结点的子树要区分左子树和右子树,即使只有一颗子树也一定要进行区分说明它是左子树还是右子树。
而树当结点只有一个孩子时,就无须区分它是左还是右的次序,因此二者是不同的。这就是二叉树和树的最主要的差别。
如下图所示:
例:具有3个结点的二叉树以及树可能的形态:
二叉树的基本形态:
其中空二叉树是一个结点都没有,即n=0。
两种特殊形式的二叉树:
满二叉树:
举例:
完全二叉树:
举例:
另外:
树和二叉树的抽象类型定义:
可以看到它的基本操作特别多,所以下面只列举几个重要的操作:
这就是树以及二叉树的初始化,先序、中序、和后序遍历的基本操作。