----------------------
asp.net+unity開發
、.net培訓
、期待與您交流! ----------------------
六、樹的前序、中序、後序
前序遍歷(根左右):
1.訪問根節點
2.前序遍歷左子樹
3.前序遍歷右子樹
中序遍歷(
左根右
): 1.中序遍歷左子樹
2.訪問根節點
3.中序遍歷右子樹
後序遍歷(
左右根
): 1.後序遍歷左子樹
2.後序遍歷右子樹
3.訪問根節點 擴充套件
:已知前序、中序遍歷,求後序遍歷?
例:前序遍歷: gdafemhz
中序遍歷: adefghmz
分析:第一步:因為前序遍歷的規則是根左右,所以前序的第乙個元素必定是根元素,此例中為g
第二步:再看中序遍歷,由第一步中得到的根g,可以把中序分成兩部分,左子樹(adef)和右子樹(hmz)
第三步:
再根據前序遍歷,可以得到左子樹的前序為(dafe),那麼
這個根d必定是之前樹根g的左孩子,然後
左子樹中序為(adef)(第二步得到),這樣就形成了一組新的前序和中序。
第四步:同理,右子樹的前序(mhz)的根節點m為之前根g的右孩子,也同樣有一組新的前序和中序。
第五步:上面的過程其實可以遞迴呼叫——
1.先找到根節點,然後劃分左子樹和右子樹,本例答案:2.左子樹遞迴
3.右子樹遞迴
4.加上根節點
後序:aefdhzmg
note:這三者中,已知兩個,可以求得另乙個(也就是說,已知兩個便可確定乙個樹的布局)。
七、前趨和後繼
這裡討論的是中序前趨和中序後繼。
因為前序、中序和後序中,一般都只是用中序(因為中序是從小到大排序)。
定義:元素n的前趨:整個樹中只比n小的那個元素。
元素n的後繼:整個樹中只比n大的那個元素。
在二叉搜尋樹中(包含紅黑樹),乙個節點的前趨,只能在兩個地方:
1.該節點左子樹中的最大元素,即左子樹中的最右節點
2.如果該節點左子樹為空,那麼它的前趨是它祖先節點中第乙個為右分支的節點。
示例:下圖中f的中序前趨為b
後繼的情況和前趨剛好對稱。
note:在紅黑樹的刪除操作中,如果被刪元素有兩非空兒子,那麼其實真正刪除的其實是它的前趨元素了。
八、樹的遍歷
通過了解六和七中的中序、前趨和後繼,那麼,要遍歷乙個紅黑樹就很簡單了。
首先,找到樹中的最小元素(整棵樹的最左節點),然後一步一步求它的後繼就可以了,直到整個樹的最右節點,就結束
至此為止,通過紅黑樹解釋的三篇文章,我們已經詳細分析了一棵紅黑樹的建立,插入元素,刪除元素,遍歷元素,
希望能給初學者一點幫助,如果有什麼理解不當之處,歡迎指正。
本文參考:
紅黑樹演算法的實現與剖析:
紅黑樹的介紹和實現(一):
----------------------
asp.net+unity開發
、.net培訓
、期待與您交流! ----------------------詳細請檢視:
紅黑樹學習筆記
二叉樹,他的定義是每個節點最多只有兩個子樹 即左子樹和右子樹,當然也可以沒有子樹 如下圖是乙個簡單的二叉樹 對於這樣的資料結構,在c語言中通常這樣來定義結構體?1 2 3 4 5 typedefstruct binary tree binarytree 二叉搜尋樹,首先他也是乙個二叉樹,與二叉樹不同...
紅黑樹學習筆記
因為學習hashmap的時候,遇到了紅黑樹,故而複習哈,想深度學習的請轉到下面鏈結,作者 並茂的詳細講解了哈,分析的很清楚,覺得好的不忘給別人手動比心。30張圖帶你徹底理解紅黑樹 因為從這裡開始,是自己的學習筆記,從上面提到的文章中學習總結的,主要是為了給自己看,記錄哈,容易忘記,純概念,可能比較苦...
紅黑樹學習筆記
1.每個節點不是紅色就是黑色 2.不可能有連在一起的紅色節點 3.根節點都是黑色的 root 沒有父節點的節點就是根節點,即入度為0 4.每個紅色節點的兩個子節點都是黑色,葉子節點都是黑色,出度為0,滿足了性質就可以近似的平衡了,不一定要紅黑,也可以是其他的。紅黑樹有三種旋轉方式 1.改變顏色 紅變...