这破旧的脑子——二叉树

为何会写这篇文章

学习的时间愈来愈长总会忘掉一些东西,就好比向量,矩阵,二叉树,邻接表,太多太多东西,不用就都给忘了,今天看了这样一道面试题:总结下来就是根据二叉树的前中序遍历,而后写出后序遍历,清晰的记得当时学习二叉树的时候作这种题是很快的,但是我还真就卡住了,不是说须要作一下子,是作不出来,看过好多遍使用程序实现DFS(深度优先)BFS(广度优先)的例子,但是让我用笔推断,我还真就脑子瓦特了,因此也记录一下,顺便帮一下也忘记了手工推断的大家回忆一下,大家必定都比我优秀,perfect。面试

题目:

  • 前序遍历学习

    • A D C E F G H B
  • 中序遍历spa

    • C D F E G H A B
  • 后序遍历?

这些遍历就是根据遍历根节点的顺序而定义的,前序遍历就是优先遍历根节点而后遍历左右子节点,固然左右子节点也是根据这个原则遍历的,那么中后序遍历也同样。那么咱们应该怎么去作呢?其实就是根据前中遍历的结果推断出这颗树。。。blog

  • 第一步ip

    • 根据前序遍历原则找出根节点:A 由于优先遍历根节点
    • 根据根节点A和中序遍历划分前中序遍历的左右子树,以中左表示,前序遍历的左右子树,之前左表示:it

      • 中左:C D F E G H
      • 中右:B
      • 前左:D C E F G H
      • 前右:B

clipboard.png

  • 第二步class

    • 根据上面的中左,前左继续划分根节点:D 因为右子树就一个节点,因此就结束了
    • 根据根节点D和中序遍历划分前中序遍历的左右子树
    • 中左:C
    • 中右:F E G H
    • 前左:C
    • 前右:E F G H

clipboard.png

  • 第三步cli

    • 根据上面的中右,前右继续划分根节点:E 因为左子树就一个节点,因此就结束了
    • 根据根节点E和中序遍历划分前中序遍历的左右子树
    • 中左:F
    • 中右:G H
    • 前左:F
    • 前右:G H

clipboard.png

  • 第四步二叉树

    • 根据上面的中右,前右继续划分根节点:G 因为左子树就一个节点,因此就结束了
    • 根据根节点G和中序遍历划分前中序遍历的左右子树
    • 中左:
    • 中右:H
    • 前左:
    • 前右:H

clipboard.png
终于构建出来这颗树了,接下来根据后序遍历原则去写:遍历

  • 后序遍历结果亮相:

    • C F H G E D B A

只有多学习才能变得更强,仍是那句话:
坚持一件事,对本身。

相关文章
相关标签/搜索