樹的遍歷和堆排序基本概念

樹的遍歷:


blob.png廣度優先遍歷,也叫做層序遍歷

層序遍歷:按照樹的層次,從第一層開始,自左向右遍歷元素,遍歷序列ABCDEFGHI












深度優先遍歷:

  設樹的根結點爲D,左子樹爲L,右子樹爲R,且要求L一定在R之前,則有下面幾種遍歷方式:

  1.前序遍歷,也叫先序遍歷、也叫先根遍歷,DLR

  2.中序遍歷,也叫中根遍歷,LDR

  3.後序遍歷,也叫後根遍歷,LRD


blob.png前序遍歷DLR:

  從根結點開始,先左子樹,後右子樹;

  每個子樹內部依然是先根結點,再左子樹後右子樹。遞歸遍歷;

  遍歷序列:

    A  BDGH  CEIF

    根 左子樹 右子樹







blob.png中序遍歷:

  從根結點的左子樹開始遍歷,然後是根結點,再右子樹;

  每個子樹內部,也是先左子樹,後根結點,再右子樹。遞歸遍歷

  遍歷序列:

    左圖

      GDHB A IECF

    右圖

      GDHB A EICF





blob.png後序遍歷LRD:

  先左子樹,後右子樹,再根結點

  每個子樹內部依然是先左子樹,後右子樹,再根結點。遞歸遍歷

  遍歷序列:

    GHDB IEFC A









堆排序Heap Sort

堆Heap

  堆是一個完全二叉樹;

  每個非葉子結點都要大於或者等於其左右孩子結點的值稱爲大頂堆;

  每個非葉子結點都要小於或者等於其左右孩子結點的值稱爲小頂堆;

  根結點一定是大頂堆中的最大值,一定是小頂堆中的最小值;


大頂堆:

blob.png

小頂堆:

blob.png



堆排序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被交換到新的位置,還需要和其它孩子結點重複上面的過程;


未完。。。。待續。。。。。

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章