其实作为树的最后一点内容并没有多少,主要探讨树、森林、二叉树的关系,以及在严蔚敏老师的数据结构中提到的其他有关树的一些实现方式。
树的其他实现方式
父结点表示法
如果我们将所有结点放入一个顺序存储中,以下标直接存取结点,并在结点中表示其父结点的下标
孩子表示法
我们对父结点表示法稍加修改,结点中不再存放其父结点的下标,而是改为所有子结点的下标
兄弟表示法
即上文提到的树的表示方法。回过头我们再观察其结构,很容易发现这其实就是一棵二叉树,其左子结点代表其下所有子结点,而右结点代表其兄弟结点
森林
由 m(m∈N) 棵互不相交的树的集合,称之为森林,即这些树没有公共 ancestor。我们可以将不同的树的根看作是 sibling,那么我们可以很轻松的将森林转换为一棵二叉树。
森林转换成二叉树
将各棵树分别转换成二叉树
将每棵树的根结点用线相连
以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树型结构
二叉树转换成森林
抹线:将二叉树中根结点与其右孩子连线,及沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成孤立的二叉树
还原:将孤立的二叉树还原成树(二叉树→树)