树结构概括
树结构是一种非线性存储结构,存储的是具有一对多关系的数据元素的集合
如上图是使用树结构存储集合 {A,B,C,D,E,F,G,H,I,J,K,L,M}
的示意图
具体一对多关系表现在:数据 A 和数据 B、C、D 有关系;数据 B 和 A、E、F 有关系…
树的结点
结点:使用树结构存储的每一个数据元素都被称为结点(结点 A)
(如下三个概念)对于结点 A、B、C、D 来说!!!
父结点(双亲结点):在子结点上面一个位置的结点称为父结点(结点 A)
子结点(孩子结点):在父结点下面一个位置的结点均称为子结点(结点 B\C\D)
兄弟结点:同一个父结点的子结点被称为兄弟结点(结点 B\C\D)
树根结点(根结点):没有父结点的结点被称为树根结点(结点 A)
注意:每一个非空树都有且只有一个被称为根的结点
叶子结点(叶结点):没有任何子结点的结点被称为叶子结点(结点K\L\F\G\M\I\J )
子树和空树
子树:整棵树的根结点为结点 A,而如果单看结点 B、E、F、K、L 组成的部分来说,也是棵树,而且节点 B 为这棵树的根结点
所以可以称 B、E、F、K、L 这几个结点组成的树为整棵树的子树,根结点为 B;同样结点 E、K、L 构成的也是一棵子树,根结点为 E
注意!!!
单个结点也是一棵树,只不过根结点就是它本身(结点 K、L、F 等都是树,且都是整棵树的子树)
由此得到了树的又一个定义:树是由根结点和若干棵子树构成的
空树:如果集合本身为空,那么构成的树就被称为空树(空树中没有结点)
结点的度和层次
概念1:对于一个结点,拥有的子树数(结点有多少分支)称为结点的度
e.g. 结点 A 有三个分支,故结点 A 的度为 3
概念2:树内各结点的度的最大值称为一棵树的度
e.g. 此颗树的度为 3
概念3(结点的层次):从一棵树的树根开始,树根所在层为第一层,根的子结点所在的层为第二层,依次类推
e.g. A 结点在第一层,B\C\D 在第二层,E\F\G\H\I\J 在第三层,K\L\M 在第四层
注意!!!
由于此处引进了结点层次的概念,所以我们有条件引进堂兄弟结点的概念
如果二个结点的父结点不同,但是其处于同一层次,那么我们可以称这二个结点称为堂兄弟结点(G 和 E)
概念4:树中结点所在的最大的层次称为一棵树的深度(高度)
e.g. 此颗树的深度为 4
有序树和无序树
如果树中结点(A)的子树从左到右看,谁在左边,谁在右边,是有规定的,那么这棵树称为有序树,否则称为无序树
在有序树中,一个结点最左边的子树称为第一个孩子,最右边的称为最后一个孩子
如果它是一颗有序树,那么以 B 为根结点的子树为整颗树的第一个孩子,以 D 为根结点的子树为整棵树的最后一个孩子
森林
由 m(m >= 0)个互不相交的树组成的集合被称为森林
如上图,以 B、C、D 为根结点的三棵子树就可以称为森林
树可以理解为是由根结点和若干子树构成的,而这若干子树本身是一个森林,所以,树还可以理解为是由根结点和森林组成的
Tree =(root,F)
其中,root 表示树的根结点,F 表示由 m(m >= 0)棵树组成的森林
树的表示方法
除了上述一直提到的树形图外
还有左侧以嵌套的集合形式表示(集合之间绝不能相交,即图中任意两个圈不能相交)
还有右侧以凹入表示法形式表示(最长条为根结点,相同长度的表示在同一层次)
然而最常用的表示方式是使用广义表的方式
(A , ( B ( E ( K , L ) , F ) , C ( G ) , D ( H ( M ) , I , J ) ) )