树的基本定义我已经在前一篇手记中浅显地讲解了一下,既然定义的一棵树,那
么我们应该使用什么结构既能存储树中结点所包含的数据,又能存储各节点之间的关系呢。根据顺序存储和链式存储的不同特点,我们将用四种表示法:双亲表示法、孩子的多重链表表示法、孩子链表表示法、孩子兄弟表示法。
1、双亲表示法
在树中除了根结点以外,其他结点都会仅有一个双亲结点。
将数组中的下标用于表示双亲结点的位置或者是左孩子或者右孩子或是由兄弟。当然,这样的结构依赖于存储的顺序是采用的是层序遍历。
2、孩子的多重链表表示法
这种表示方法分2种,一种是多重链表表示法,即用树的度就表示一个节点指针域的个数,这样很大程度上浪费了内存资源。第二种是孩子链表表示法,即一个节点的指针域的个数和其孩子的个数(该节点的度)相等。
3、孩子链表表示法
用多个单链表表示孩子,在同一个单链表中的孩子有着共同的双亲。
有孩子链表表示法衍生出来的双亲孩子表示法,既是将双亲表示法和孩子链表表示法相结合起来了,将孩子与双亲,双亲与孩子之间的关系展示出来,可以不用遍历便可寻找孩子的双亲或者双亲的孩子。
4、孩子兄弟表示法
存储区域分三块,中间那块存储结点的数据,左边指向该节点的第一个孩子,右边指向该节点的右兄弟。