二叉树与汉诺塔
前言
去年考研学习过程中,看过郝斌的数据结构入门(讲的挺好的),当时看过二叉树的遍历时,发现,其实汉诺塔的移动轨迹可以表示为二叉树的中序遍历路径,当时一直想写文章记下来,,然后拖到现在。
二叉树
数据结构中的一种,每个结点最多有两个子结点的树结构。其中左子结点下面的子树为左子树,右子点结点的为右子树。
二叉树的遍历是按照一定规则不重复的走遍所有结点。中序遍历作为二叉树的遍历方式之一,这个过程是递归形式,其规则为:
- 中序遍历左子树
- 访问根节点
- 中序遍历右子树
如上图的遍历顺序为CBDAFEG
汉诺塔
汉诺塔之前写过可以去看https://www.jianshu.com/p/e7b1e2b772d5
)
这里玩汉诺塔的三步可以和中序遍历的三步对比。
1.【将n-1个圆盘从a移到】 ----> 【中序遍历左子树】[n-1(a)->b]
2.【将第n个圆盘移到c上】----> 【访问根节点】[N(a)->c]
3.【将n-1个圆盘从b移到c】---> 【中序遍历右子树】[n-1(b)->c]
举个例子:
将上图的a上的四个方块移到c上的移动路径就可以表示为二叉树:
这个二叉树按照中序遍历为: AIBJHLKMCFDOERN, 依次移动就可以将a上的四个移动到c上了。