二叉树遍历解析
1 / \ 2 3 / \ / \
4 5 6 7
當你拿到一棵二叉樹,無論它的形狀如何的千奇百怪
我們都可以將它按照如下的方式劃分根/ \
左子樹 右子樹
一棵有很多個節點的二叉樹可以劃分為以上的形式
也可以這么理解,只要是按以上形式組合的都可以稱為是二叉樹
一個僅僅只有根節點的二叉樹也可以劃分成以上的形式,只不過他的左右子樹都為空罷了
所以,我們發現,二叉樹的定義其實是一個遞歸定義的過程
大的二叉樹是由小的二叉樹構建而成的
所以,當我們考慮要遍歷一棵二叉樹時
也是首選遞歸的遍歷
遍歷二叉樹
它的基本思想是先按照上面的形式把整棵二叉樹劃分為3部分
哪么接下來的工作就很簡單了
我們只需要將這3部分都遍歷一遍就可以了(這里用到了分而治之的思想)
而對于這3部分來說
根節點的遍歷無疑是最方便的,直接訪問就ok了
而對于左右子樹呢?
我們不難發現,左右子樹其實分別成為了兩棵完整的樹
他們擁有各自獨立的根節點,左子樹和右子樹
對他們的遍歷,很顯然應該與剛才的遍歷方法一致便可
(如果上面的都理解了,那么這個題就是小菜一碟了,如果覺得無法理解,可以按照下面的方法自己多分解幾棵樹)
對于這個題目,中序遍歷這可二叉樹
先看根節點1/ \
左子樹 右子樹
我們應該先遍歷左子樹
也就是下面這棵樹2/ \
4 5
對于這棵樹在進行中序遍歷
我們應先遍歷她的左子樹
他只有一個根節點4,左右子樹都為空
哪么遍歷這個只有一個根節點的二叉樹
先訪問她的左子樹,為空
返回
訪問該樹的根節點4
在訪問右子樹也為空
此時,這棵樹已經被完全的遍歷了
我們需要返回上一層也就是2/ \
4 5
這棵樹
此時,她的左子樹已經被訪問完畢
根據中序遍歷的規則
需要訪問此樹的根節點2
此時的訪問順序是4-2
訪問了根節點
在訪問右子樹只有一個根節點的5(具體過程看4的訪問)
5訪問完畢
也就意味著2/ \
4 5
這棵樹已經訪問完了
需要返回上一層
也就是1為根的樹
此時這棵樹的左子樹已經訪問完畢
此時訪問的順序是4-2-5應該沒有問題
接下來訪問根節點1
在訪問右子樹3/ \
4 7
是不是覺得似曾相識???
她的訪問應該跟2/ \
4 5
一致
哪么最終遍歷的順序也出來了
4-2-5-1-6-3-7
總結
- 上一篇: TCP,UDP数据包的大小以及MTU
- 下一篇: opengl多重纹理映射