1.此前的向量,列表数据结构存在不够用的情况
2.向量的静态操作效率很高,动态操作效率很低,而列表则反之,即两者无法同时兼顾静态操作和动态操作的高效性
3.树融合了向量和列表的优点,为半线性结构
4.树的概念
指定任一节点r作为根后,T即称作有根树
任何一个节点r所拥有的孩子的数目,称作r的度数,d=degree(r)为r的度
任何一棵树中所含的边数,恰好等于树中所有顶点的度数之和,也恰好等于顶点总数减一:e=n-1
5.路径&环路
V中的k+1个节点,通过E中的k条边依次相联,构成一条路径(path)//亦称通路
pi={(V0,V1),(V1,V2),...,(Vk-1,Vk)}
路径长度:|pi|=边数=k
环路:Vk=V0
6.联通&无环
节点之间均有路径,称作联通图,不含环路,称作无环图
任一节点V与根之间存在唯一路径:path(v,r)=path(v)
7.深度&层次
V的深度:depth(v)=|path(v)|
path(v)上的节点,均为v的祖先,v是它们的后代
半线性:V的祖先唯一,后代不一定唯一
没有后代的节点称为叶子,所有叶子深度中的最大者,称为树的高度
空树的高度取作-1.
8.树的接口
root():根节点
parent():父节点
firstChild():长子
nextSibling():兄弟
insert(i,e):
remove(i):
traverse():遍历
9.长子兄弟表示法
每个节点均设两个引用:纵向firstChild(),横向nextSibling()