树的表示方法:
双亲表示法:
1,(只能找到双亲,要找孩子得重新遍历一遍)一个数据域存的每个结点的名字,例如ABCD等,一个双亲域,双亲域存的是双亲所在的数组下标,根结点不存在双亲,所以对应的指针域为-1
2.(能找到孩子,增加一个结点左边孩子的域)增加一个存左边孩子下标的域,如果此这个数据域只有一个孩子,也算在这里,如果没有孩子,则直接存-1,存的是左边孩子的数组下标
3.(关注孩子之间的关系)增加一个右兄弟域来体现兄弟之间的关 系,如果这个数据域有右兄弟,就存右兄弟的下标,如果没有,则存-1
多重链表表示法:
1.指针域的个数等于树的度的个数,这种方法对于树中结点的度相差很大时,浪费空间
2.每个结点指针域的个数等于该结点的度的个数,所以要再开一个域来存这个结点的度,剩下的为指针域,指向该结点的各个孩子的结点
孩子表示法:
把每个结点的孩子结点排列起来,以单链表存储,n个结点有n个孩子链表,如果没有孩子,则此单链表为空,n个头指针又组成一个线性表,放进一个一维数组中,要设计两种结点结构,一种是孩子链表的孩子结点有child域和next域,child域存此结点孩子所对应的数组下标,next域用来存储指向某结点的下一个孩子结点的指针,另一种是表头结点data域和firstchild域,data域用来存储结点的信息,如ABCD等,firstchild域是头指针域,存储的是孩子链表的头指针
孩子兄弟表示法:
定义三个域,第一个data域是数据域,firstchild为指针域,存储该结点的第一个孩子 的存储地址,rightsib是指针域,存储该结点的右兄弟结点的存储地址