先訪問根節點
再先序訪問左子樹
再先序訪問右子樹
訪問左子樹步驟:
1. 從根節點a開始
2. 訪問a的左子樹(以b為根節點的樹)
3. 訪問b的左子樹(以d為根節點的樹)
4. 訪問d的左子樹,為空
5. 訪問d的右子樹,為空,d訪問完畢,意味著b的左子樹訪問完了
6. 返回到b,訪問b的右子樹,為空,b訪問完畢,意味著a的左子樹訪問完了
7. 返回到a
即左子樹遍歷為a-b-d
訪問右子樹:
操作與上相同,最後a的右子樹訪問完畢,意味著整棵樹訪問完畢
最終遍歷結果是:a-b-d-c-e-f-g
先遍歷左子樹
再訪問根節點
再中序遍歷右子樹
操作:
1. 從根節點a的左子樹(以b為根節點)開始
2. 訪問b的左子樹,為空
3. 訪問根節點b
4. 訪問b的右子樹(以c為根節點)
5. 訪問c的左子樹(以d為根節點)
6. 訪問d的左子樹,為空
7. 訪問根節點d
8. 訪問d的右子樹,為空,d訪問完畢
9. 返回到c,訪問根節點c
10. 訪問c的右子樹(以e為根節點)
11. 訪問e的左子樹,為空
12. 訪問根節點e
13. 訪問e的右子樹,為空,e訪問完畢
14. 返回到c,c訪問完畢
15. 返回到b,b訪問完畢
16. 返回到a,訪問根節點a
17. 訪問a的右子樹(以f為根節點)……操作同上
最終結果:b-d-c-e-a-l-f-n-q-m
先遍歷左子樹
再遍歷右子樹
再訪問根節點
操作:
1. 先訪問a的左子樹(以b為根節點)
2. 訪問b的左子樹,為空;訪問b的右子樹,為空;訪問根節點b,訪問完畢
3. 返回到a,訪問a的右子樹(以c為根節點)
4. 訪問c的左子樹(以d為根節點)
5. 訪問d的左子樹,為空;訪問d的右子樹,為空;訪問根節點d,訪問完畢
6. 返回到c,訪問c的右子樹(以e為根節點)
7. 訪問e的左子樹(以f為根節點)
8. 訪問f的左子樹(以m為根節點)
9. 訪問m的左子樹,為空;訪問m的右子樹,為空;訪問根節點m,訪問完畢
10. 返回到f;訪問f的右子樹,為空;訪問根節點f,訪問完畢
11. 返回到e;訪問e的右子樹(以l為根節點)
12. 訪問l的左子樹,為空;訪問l的右子樹,為空;訪問根節點l,訪問完畢
13. 返回到e,訪問根節點e,訪問完畢
14. 返回到c,訪問根節點c,訪問完畢
15. 返回到a,訪問根節點a,訪問完畢
最終結果是:b-d-m-f-l-e-c-a
二叉樹先序 中序 後序遍歷
題目 用遞迴和非遞迴方式,分別按照二叉樹先序 中序和後序列印所有的節點。我們約定 先序遍歷順序為根 左 右 中序遍歷順序為左 根 右 後序遍歷順序為左 右 根。遞迴實現 遞迴遍歷二叉樹 先序 public void preorderrecur node head system.out.println...
二叉樹先序遍歷 中序遍歷 後序遍歷
輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...
二叉樹先序遍歷 後序遍歷 中序遍歷
從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...