树的基本概念
树:是n(n≥0)个结点的有限集T。在任意一棵非空树中:
① 有且仅有一个特定的结点,称为树的根(root),它没有直接前驱,但有零个或多个直接后继。
② 其余n-1结点可分为m(m≥0)个互不相交的有限集T1,T2,…Tm,其中Ti又是一棵树,称为根的子树。树的定义具有递归性,即“树中还有树”。
树的逻辑结构图示:如同一棵倒长的树
树的图解表示法
① 倒置树结构表示法(树形表示法)
② 文氏图表示法(嵌套集合表示法)
③ 广义表表示法(嵌套括号表示法)
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
④ 凹入表示法
树的相关术语
结点:即树中的元素,包含本身信息和指向其他结点的分支信息。
结点的度:该结点子树的个数。
树的度:树中所有的结点的度的最大值。
叶子结点:度为0的结点,即终端结点,简称叶结点、叶子。
分支结点:度不为0的结点,即非终端结点。
结点的层次:从根结点算起,根结点的层次为1,根的直接后继的层次为2,以此类推。
树的高度(深度):树中所有结点的层次的最大值。
孩子:直接后继结点。
双亲:直接前驱结点。
兄弟:拥有同一双亲的结点。
堂兄弟:同层非兄弟的结点。
祖先:从根到该结点经路径上的所有结点。
子孙:直接后继结点和间接后继结点。
前辈:层号比该结点小的结点。
后辈:层号比该结点大的结点。
有序树:在树T中,如果各子树Ti之间有先后次序的,则称为有序树。
同构:对两棵树,通过对结点适当的重命名,就可以使两棵树完全相等(结点对应相等,对应结点的相关关系也相等)。
例:具有3个结点不同构的有序树共5种:
森林: m(m≥0)个互不相交的树的集合。将一棵非空树的根结点删除,树就变成了森林;反之,给森林增加一个统一的根结点,森林就变成了一棵树。
树的抽象数据类型定义
ADT Tree{
数据对象:元素集合D,元素特性相同。
数据关系:若D为空,空树;若D仅含一个元素,则R为空;否则R={H},二元关系H={<结点,孩子>,...,<结点,孩子>},根结点root没有前驱,其他结点有且仅有一个前驱,后继结点可以有零个或多个。
基本操作:关于树的运算的集合。
}ADT Tree;
D = { A,B,C,D,E,F,G,H,I,J,K,L,M }
R = { H }
H = { <A,B>,<A,C>,<A,D>,<B,E>, <B,F>,
<E,K>,<E,L>,<C,G>, <D,H>,<D,I>,<D,J>,
<H,M> }
欢迎大家加我微信交流讨论(请备注csdn上添加)