树的表示方法
树的表示方法
树的表示方法一般有三种:遍历表示法,括号序列法以及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数列适用于无根树。