樹的遍歷:
算法
廣度優先遍歷,也叫作層序遍歷數據結構
層序遍歷:按照樹的層次,從第一層開始,自左向右遍歷元素,遍歷序列ABCDEFGHIide
深度優先遍歷:排序
設樹的根結點爲D,左子樹爲L,右子樹爲R,且要求L必定在R以前,則有下面幾種遍歷方式:遞歸
1.前序遍歷,也叫先序遍歷、也叫先根遍歷,DLRit
2.中序遍歷,也叫中根遍歷,LDRclass
3.後序遍歷,也叫後根遍歷,LRD二叉樹
前序遍歷DLR:遍歷
從根結點開始,先左子樹,後右子樹;im
每一個子樹內部依然是先根結點,再左子樹後右子樹。遞歸遍歷;
遍歷序列:
A BDGH CEIF
根 左子樹 右子樹
中序遍歷:
從根結點的左子樹開始遍歷,而後是根結點,再右子樹;
每一個子樹內部,也是先左子樹,後根結點,再右子樹。遞歸遍歷
遍歷序列:
左圖
GDHB A IECF
右圖
GDHB A EICF
後序遍歷LRD:
先左子樹,後右子樹,再根結點
每一個子樹內部依然是先左子樹,後右子樹,再根結點。遞歸遍歷
遍歷序列:
GHDB IEFC A
堆排序Heap Sort
堆Heap
堆是一個徹底二叉樹;
每一個非葉子結點都要大於或者等於其左右孩子結點的值稱爲大頂堆;
每一個非葉子結點都要小於或者等於其左右孩子結點的值稱爲小頂堆;
根結點必定是大頂堆中的最大值,必定是小頂堆中的最小值;
大頂堆:
小頂堆:
堆排序Heap Sort
一、構建徹底二叉樹
待排序數字爲30,20,80,40,50,10,60,70,90
構建一個徹底二叉樹存放數據,並根據性質5對元素編號,放入順序的數據結構中
構造一個列表爲[0,30,20,80,40,50,10,60,70,90]
二、構建大頂堆---核心算法
度數爲2的結點A,若是它的左右孩子結點的最大值比它大的,將這個最大值和該結點交換;
度數爲1的結點A,若是它的左孩子的值大於它,則交換;
若是結點A被交換到新的位置,還須要和其它孩子結點重複上面的過程;
三、構建大頂堆---起點結點的選擇
從徹底二叉樹的最後一個結點的雙親結點開始,即最後一層的最右邊葉子結點的父結點開始;
結點數爲n,則起始結點的編號爲n//2(性質5)
四、構建大頂堆---下一個結點的選擇
從起始結點開始向左找其同層結點,到頭後再從上一層的最右邊結點開始繼續向左逐個查找,
直至根結點