這破舊的腦子——二叉樹

爲什麼會寫這篇文章

學習的時間越來越長總會忘掉一些東西,就比如向量,矩陣,二叉樹,鄰接表,太多太多東西,不用就都給忘了,今天看了這樣一道面試題:總結下來就是根據二叉樹的前中序遍歷,然後寫出後序遍歷,清晰的記得當時學習二叉樹的時候做這種題是很快的,可是我還真就卡住了,不是說需要做一會兒,是做不出來,看過好多遍使用程序實現DFS(深度優先)BFS(廣度優先)的例子,可是讓我用筆推斷,我還真就腦子瓦特了,所以也記錄一下,順便幫一下也忘記了手工推斷的你們回憶一下,你們一定都比我優秀,perfect。

題目:

  • 前序遍歷

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

    • C D F E G H A B
  • 後序遍歷?

這些遍歷就是根據遍歷根節點的順序而定義的,前序遍歷就是優先遍歷根節點然後遍歷左右子節點,當然左右子節點也是根據這個原則遍歷的,那麼中後序遍歷也一樣。那麼我們應該怎麼去做呢?其實就是根據前中遍歷的結果推斷出這顆樹。。。

  • 第一步

    • 根據前序遍歷原則找出根節點:A 因爲優先遍歷根節點
    • 根據根節點A和中序遍歷劃分前中序遍歷的左右子樹,以中左表示,前序遍歷的左右子樹,以前左表示:

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

clipboard.png

  • 第二步

    • 根據上面的中左,前左繼續劃分根節點:D 由於右子樹就一個節點,所以就結束了
    • 根據根節點D和中序遍歷劃分前中序遍歷的左右子樹
    • 中左:C
    • 中右:F E G H
    • 前左:C
    • 前右:E F G H

clipboard.png

  • 第三步

    • 根據上面的中右,前右繼續劃分根節點:E 由於左子樹就一個節點,所以就結束了
    • 根據根節點E和中序遍歷劃分前中序遍歷的左右子樹
    • 中左:F
    • 中右:G H
    • 前左:F
    • 前右:G H

clipboard.png

  • 第四步

    • 根據上面的中右,前右繼續劃分根節點:G 由於左子樹就一個節點,所以就結束了
    • 根據根節點G和中序遍歷劃分前中序遍歷的左右子樹
    • 中左:
    • 中右:H
    • 前左:
    • 前右:H

clipboard.png
終於構建出來這顆樹了,接下來根據後序遍歷原則去寫:

  • 後序遍歷結果亮相:

    • C F H G E D B A

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章