馬程式設計師學習筆記 紅黑樹解析三

2021-06-22 08:26:45 字數 1965 閱讀 8974

---------------------- 

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.改變顏色 紅變...