二叉树与汉诺塔

二叉树与汉诺塔

前言

去年考研学习过程中,看过郝斌的数据结构入门(讲的挺好的),当时看过二叉树的遍历时,发现,其实汉诺塔的移动轨迹可以表示为二叉树的中序遍历路径,当时一直想写文章记下来,,然后拖到现在。

二叉树

数据结构中的一种,每个结点最多有两个子结点的树结构。其中左子结点下面的子树为左子树,右子点结点的为右子树。
二叉树.png
二叉树的遍历是按照一定规则不重复的走遍所有结点。中序遍历作为二叉树的遍历方式之一,这个过程是递归形式,其规则为:

  1. 中序遍历左子树
  2. 访问根节点
  3. 中序遍历右子树

如上图的遍历顺序为CBDAFEG

汉诺塔

汉诺塔之前写过可以去看那篇文章

这里玩汉诺塔的三步可以和中序遍历的三步对比。
1.【将n-1个圆盘从a移到】 ----> 【中序遍历左子树】[n-1(a)->b]
2.【将第n个圆盘移到c上】----> 【访问根节点】[N(a)->c]
3.【将n-1个圆盘从b移到c】---> 【中序遍历右子树】[n-1(b)->c]

举个例子:
image.png
将上图的a上的四个方块移到c上的移动路径就可以表示为二叉树:
image.png
这个二叉树按照中序遍历为: AIBJHLKMCFDOERN, 依次移动就可以将a上的四个移动到c上了。

猜你喜欢

转载自www.cnblogs.com/huanping/p/12595827.html