樹的遍歷:
廣度優先遍歷,也叫做層序遍歷
層序遍歷:按照樹的層次,從第一層開始,自左向右遍歷元素,遍歷序列ABCDEFGHI
深度優先遍歷:
設樹的根結點爲D,左子樹爲L,右子樹爲R,且要求L一定在R之前,則有下面幾種遍歷方式:
1.前序遍歷,也叫先序遍歷、也叫先根遍歷,DLR
2.中序遍歷,也叫中根遍歷,LDR
3.後序遍歷,也叫後根遍歷,LRD
前序遍歷DLR:
從根結點開始,先左子樹,後右子樹;
每個子樹內部依然是先根結點,再左子樹後右子樹。遞歸遍歷;
遍歷序列:
A BDGH CEIF
根 左子樹 右子樹
中序遍歷:
從根結點的左子樹開始遍歷,然後是根結點,再右子樹;
每個子樹內部,也是先左子樹,後根結點,再右子樹。遞歸遍歷
遍歷序列:
左圖
GDHB A IECF
右圖
GDHB A EICF
後序遍歷LRD:
先左子樹,後右子樹,再根結點
每個子樹內部依然是先左子樹,後右子樹,再根結點。遞歸遍歷
遍歷序列:
GHDB IEFC A
堆排序Heap Sort
堆Heap
堆是一個完全二叉樹;
每個非葉子結點都要大於或者等於其左右孩子結點的值稱爲大頂堆;
每個非葉子結點都要小於或者等於其左右孩子結點的值稱爲小頂堆;
根結點一定是大頂堆中的最大值,一定是小頂堆中的最小值;
大頂堆:
小頂堆:
堆排序Heap Sort
1、構建完全二叉樹
待排序數字爲30,20,80,40,50,10,60,70,90
構建一個完全二叉樹存放數據,並根據性質5對元素編號,放入順序的數據結構中
構造一個列表爲[0,30,20,80,40,50,10,60,70,90]
2、構建大頂堆---核心算法
度數爲2的結點A,如果它的左右孩子結點的最大值比它大的,將這個最大值和該結點交換;
度數爲1的結點A,如果它的左孩子的值大於它,則交換;
如果結點A被交換到新的位置,還需要和其它孩子結點重複上面的過程;
未完。。。。待續。。。。。