汉诺塔的递归算法如下(递归的原理和汉诺为什么可以用递归就不详说了):
可以看出它跟树的中序遍历没有多大区别,在搜索的过程中,只是按照中序遍历的方式把节点输出出来。这样,我们就可以把中序遍历树画出来:
怎么理解这棵树呢?其中根节点就是要移动的最底下最大的盘,下一层节点是次大的盘……叶节点是最小的盘。每次遍历到某一个层的某一个节点,则移动该层所代表的盘。移动的方式的讨论必须先定义一个方向:
定义1、ABCA这个方向为顺时针方向;
定义2、ACBA这个方向为逆时针方向;
定义3、根节点为第一层,叶节点为最高的一层。
这样,当移动奇数层的时候,对应的盘顺时针移动一个塔座;当移动偶数层的时候,对应的盘逆时针移动一个塔座。