通俗易懂的二叉樹的前中後序遍歷

前言

二叉樹的遍歷是指不重複地訪問二叉樹中所有結點,主要指非空二叉樹,對於空二叉樹則結束返回。二叉樹的遍歷主要包括前序遍歷、中序遍歷、後序遍歷。

一棵二叉樹由根結點、左子樹和右子樹三部分組成,若規定 D、L、R 分別代表遍歷根結點、遍歷左子樹、遍歷右子樹,則二叉樹的遍歷方式有 6 種:DLR、DRL、LDR、LRD、RDL、RLD。由於先遍歷左子樹和先遍歷右子樹在算法設計上沒有本質區別,所以默認都是先左後右,故而只討論三種方式:

  • DLR--前序遍歷(根在前,從左往右,首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,根->左->右)
  • LDR--中序遍歷(根在中,從左往右,首先遍歷左子樹,然後訪問根節點,最後遍歷右子樹,左->根->右)
  • LRD--後序遍歷(根在後,從左往右,首先遍歷左子樹,然後遍歷右子樹,最後訪問根節點,左->右->根)
  • 層序遍歷(除此之外,還有一種層序遍歷,層序遍歷嘛,就是按層,從上到下,從左到右遍歷,這個沒啥好說的)

所以前中後序遍歷的前/中/後,指的是根節點在前/中/後輸出的意思,因此這三種遍歷也稱爲先根遍歷,中根遍歷,後根遍歷。

本文就不掉書袋再複述前序/中序/後序遍歷的教科書方法了。我們這裏介紹一種易記的方法。

1 先序遍歷

先序遍歷可以想象成,小人從樹根開始繞着整棵樹的外圍轉一圈,經過結點的順序就是先序遍歷的順序

先序遍歷結果:ABDHIEJCFKG

2 中序遍歷

中序遍歷可以想象成,按樹畫好的左右位置投影下來就可以了

中序遍歷結果:HDIBEJAFKCG

3 後序遍歷

後序遍歷就像是剪葡萄,我們要把一串葡萄剪成一顆一顆的。還記得我們先序遍歷繞圈的路線麼?就是圍着樹的外圍繞一圈,如果發現一剪刀就能剪下的一顆葡萄(注意必須是一顆葡萄),就把它剪下來,組成的就是後序遍歷了。

後序遍歷結果:HIDJEBKFGCA

4 層序遍歷

層序遍歷太簡單了,就是按照一層一層的順序,從左到右寫下來就行了。

後序遍歷結果:ABCDEFGHIJK

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