首页 > 技术文章 > 树的表示方法

jsawz 2017-05-04 15:59 原文

树的表示方法

树的表示方法一般有三种:遍历表示法,括号序列法以及prufer数列。

 

1.遍历表示法

遍历表示法就是通过遍历一棵树来确定这棵树的表示方法。遍历方法有三种:先序遍历,中序遍历和后序遍历。

先序遍历:按照父节点,左子结点,右子节点来遍历(简称 头左右)。以上图为例,先序遍历表达式为1 2 4 8 9 5 10 3 6 7。

中序遍历:按照左子结点,父节点,右子节点来遍历(简称 左头右)。以上图为例,中序遍历表达式为8 4 9 2 10 5 1 6 3 7。

后序遍历:按照左子结点,右子节点,父节点来遍历(简称 左右头)。以上图为例,后序遍历表达式为8 9 4 10 5 2 6 7 3 1。

2.括号序列法

通过遍历树时的遍历顺序以及出入每个节点的时间组成的序列。

按照先序遍历即为:(1(2(4(8)(9))(5(10))(3(6)(7))。

3.prufer数列

将一棵n各节点的无根树转化为长度为n-2的字符串,字符串与树之间一一对应。

生成字符串:每次将最小的叶结点的父节点存入字符串,并删除该叶结点,直到无根树只剩两个节点。

还原无根树:每次将字符串中第i个节点和从i到n-2未出现过的最小的节点连接起来,最后连接无根树剩余的那两个节点。

生成步骤:

找到6,字符串存入3,删除6,当前字符串为:3。

找到7,字符串存入3,删除7,当前字符串为:3 3。

找到3,字符串存入1,删除3,当前字符串为:3 3 1。

找到1,字符串存入2,删除1,当前字符串为:3 3 1 2。

找到8,字符串存入4,删除8,当前字符串为:3 3 1 2 4。

找到9,字符串存入4,删除9,当前字符串为:3 3 1 2 4 4。

找到4,字符串存入2,删除4,当前字符串为:3 3 1 2 4 4 2。

找到10,字符串存入5,删除10,当前字符串为:3 3 1 2 4 4 2 5。

最后剩余两节点为2 5。

还原步骤:

找到3,3之后未出现且未被标记的点为6,标记点6,连接3 6。

找到3,3之后未出现且未被标记的点为7,标记点7,连接3 7。

找到1,1之后未出现且未被标记的点为3,标记点3,连接1 3。

找到2,2之后未出现且未被标记的点为1,标记点1,连接1 2。

找到4,4之后未出现且未被标记的点为8,标记点8,连接4 8。

找到4,4之后未出现且未被标记的点为9,标记点9,连接4 9。

找到2,2之后未出现且未被标记的点为4,标记点4,连接2 4。

找到5,5之后未出现且未被标记的点为10,标记点10,连接5 10。

最后连接生成时最后剩余的两点2 5。

以上三种表示法中,遍历表示法适用于二叉树,括号序列法适用于有序树,prufer数列适用于无根树。

推荐阅读