树是一种很常见的分线性数据结构,公司的组织架构,行政区划结构等都是树形结构。树形结构里常见的有树和二叉树。
树的定义树是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:左子树为空的二叉树