二叉樹的遍歷:從根節點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個節點被訪問一次且僅被訪問一次。
二叉樹遍歷次序不同的原因:樹的結點之間不存在唯一的前驅和後繼關係,因此訪問到不同結點時會有不同的訪問選擇。選擇方式不同,訪問的次序也就不同了。
二叉樹的遍歷方法主要分爲四種(自定義左子樹 L(eft);根節點 r(oot);右子樹 R(ight))(最下方有彩蛋):
前序遍歷
中序遍歷
後序遍歷
層次遍歷
前序遍歷( rLR )
規則:若二叉樹爲空,則空操作返回;否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。
如下圖:遍歷的順序即是數字出棧的順序 1,2,3,5,4。
先序遍歷結點進出站過程
- 初態棧空;
- 結點1入棧;
- 出棧,輸出棧頂結點1,並將1的左右孩子(2和4)入棧,右孩子先入棧,左孩子後入棧。因爲要先訪問左孩子,棧是先進後出結構,所以要讓左孩子後進才能先訪問;
- 出棧,輸出棧頂結點2,並將2的左右孩子(3和5)入棧;
- 出棧,輸出棧頂結點3,3爲葉子結點,無孩子,本步無結點入棧;
- 出棧,輸出棧頂結點5,5爲葉子結點,無孩子,本步無結點入棧;
- 出棧,輸出棧頂結點4,棧空,進入終態。