這破舊的腦子——二叉樹

爲何會寫這篇文章

學習的時間愈來愈長總會忘掉一些東西,就好比向量,矩陣,二叉樹,鄰接表,太多太多東西,不用就都給忘了,今天看了這樣一道面試題:總結下來就是根據二叉樹的前中序遍歷,而後寫出後序遍歷,清晰的記得當時學習二叉樹的時候作這種題是很快的,但是我還真就卡住了,不是說須要作一下子,是作不出來,看過好多遍使用程序實現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

只有多學習才能變得更強,仍是那句話:
堅持一件事,對本身。

相關文章
相關標籤/搜索