树形结构是一种重要的非线性的结构,在计算机科学中有着广泛的应用。树是依据分支关系定义的层次结构,在这种结构中,每个数据元素最多有一个前驱,但可以有多个后继;数据元素之间的关系是一对多的层次关系,其中二叉树最为常用。
树(tree)是n个节点的有限合集。当n = 0时,集合为空集,成为空树,否则称为非空树。在任意一棵非空树中:
1.有且仅有一个特定的称为根的节点
2.当n>1时,除根节点以外其余的节点可以分为m个互不相交的集合T1, T2, T3, T4.....Tm,其中每个集合的本身又是一棵树,并称为根的子树
关于树要注意的几点:
n>0时根节点是唯一的,不可能存在多个根节点。
m>0时,子树的个数是不受限制的,但是它们一定是不相交的
在树中,只有根节点没有直接前驱的,而根节点以外的其余节点都是有且只有一个直接前驱的。基于树的这个特点,画树的示意图时一般都将根节点画在最上面
关于树的其他的表示形式:
广义表示法:
(A(B(E(G),F),C(H,I),D(J,K)))
树的基本术语:
节点(node),表示树中的元素,包含一个数据和若干个指向其子树的分支;
节点的度:一个节点的子树个数称为此节点的度,如在上图中,节点A的度为3,B的度为2,K的度为0;
叶节点:度为0的节点,即无后继的节点,又称为终端节点,在上图中K,F,G.H,I,J就可以叫做叶节点;
分支节点:度不为零的节点,又称为非终端节点,在上图中A,B,C,D都可以叫做分支节点
孩子节点:一个节点的直接后继称为该节点的孩子节点。在上图中节点B,C,D都被叫做A的孩子节点
双亲节点:一个节点的直接前驱称为该节点的双亲节点,在上图中A是B,C,D的双亲节点
兄弟节点: 同一个双亲节点的孩子节点之间又称为兄弟节点,在上图中H,I,H称为兄弟节点
祖先节点: 一个节点的祖先节点是指从根节点到该节点的路径上的所有节点。
子孙节点: 一个节点的直接后继和间接后继称为该节点的子孙节点
树的度:树中所有节点的最大值,上图中树的度为3;
节点的层次:从根节点开始进行定义,根节点的层次为1,根节点的直接后继的层次为2,以此类推,节点B,C,D在层次2,节点K在第四层。
树的高度(深度):树中所有层次的最大值,如上图中的树的最大值为4
有序树和无序数:如果将树中节点的各子树看成是从左到右是有次序的,则称该树为有序树,否则称为无序树。
森林:m棵互不相交的树的集合,将一棵非空树的根节点删去,树就变成了一个森林,反之,给森林增加一个统一的根节点,森林就变成了一棵树