上次的算法采用的算法,不适合生成相对路径,另一个的弊端在于,如果这个解析树太过庞大,那么用来表示路径的数组就越庞大,占用了大量的空间,针对这一点,我又进行了改进,从而获得了一个使用空间较少的算法。
此算法也可容易的生成相对路径。看例子,这次顺序表的结构发生了变化:
本次在存储结构上发生了变化,最上面一行表示存储的节点,下面的数字代表是该节点父节点所在的位置。当发现节点D已经存在时,记录下D的父节点位置1,然后从节点C开始向上查找父节点,如果一直查找到某个节点父节点的值小于1,说明他们不再一个分支上,在沿着D往上查找,相互交替,一直到他们到达根节点或者连续两个父节点相同,这时就可以组合出这个相对路径了。
算法二比算法一在空间使用率上有了很大的改进,但是我还没有验证此算法的可靠性,欢迎大家批评指正。