1. 程式人生 > >(考研)(精華)二叉樹的知識結構圖以及各種特殊的二叉樹

(考研)(精華)二叉樹的知識結構圖以及各種特殊的二叉樹

知識結構 aik 需要 關鍵字 構圖 每一個 知識 eight erl

技術分享

關於二叉樹有一點需要註意:二叉樹並不是樹的一種特殊形式。

二叉樹又有幾種特殊的形式:二叉排序樹(二叉查找樹)、最優二叉樹(哈弗曼樹)、二叉堆(大頂堆,小頂堆)等。斜線是數據結構

二叉排序樹(二叉查找樹)(BST)它或者是一棵空樹;或者是具有下列性質的二叉樹:(常用二分查找
1,若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
2,若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
3,左、右子樹也分別為二叉排序樹;

特有的性質:對於每個結點,左孩子均小於它,右孩子均大於它

技術分享

AVL平衡二叉樹

特有性質:第一:它是一顆二叉排序樹,查找樹,BST

第二:任何一個節點的左子樹高度和右子樹的高度差在-1,0,1三者之間

AVL樹是一種自平衡二叉排序樹,它的特點是任何一個節點的左子樹高度和右子樹的高度差在-1,0,1三者之間。AVL樹的任何一個子樹都是AVL樹。

技術分享

哈弗曼樹特有性質:1.是一顆最普通的二叉樹 2.就是帶權路徑長度最小,因此還叫最優二叉樹。

(1)完全二叉樹——只有最下面的兩層結點度小於2,並且最下面一層的結點都集中在該層最左邊的若幹位置的二叉樹;

(2)滿二叉樹——除了葉結點外每一個結點都有左右子葉且葉結點都處在最底層的二叉樹,。

技術分享技術分享

技術分享

技術分享

二叉堆小頂堆和大頂堆

性質:第一條,是一顆完全二叉樹或者近似是一顆完全二叉樹

第二條:任給一個結點總是>=其孩子的結點,部分左右

技術分享

Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]

即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的關鍵字。

堆分為大頂堆和小頂堆,滿足Key[i]>=Key[2i+1]&&key>=key[2i+2]稱為大頂堆

技術分享

技術分享

完全二叉樹是效率很高的數據結構,堆是一種完全二叉樹或者近似完全二叉樹,所以效率極高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能優化,幾乎每次都要考到的二叉排序樹的效率也要借助平衡性來提高,而平衡性基於完全二叉樹。

堆排序:

技術分享自底向上,自左向右進行調整為堆

技術分享

一個完全二叉樹到大頂堆

例子:調堆的過程應該從最後一個非葉子節點開始

分別與左孩子和右孩子比較大小,如果A[3]最大,則不用調整,否則和孩子中的值最大的一個交換位置,

技術分享

技術分享技術分享

首先:最頂上那個元素和最末的那個元素交換

其次:調整為堆即每次調整都是從父節點、左孩子節點、右孩子節點三者中選擇最大者跟父節點進行交換(交換之後可能造成被交換的孩子節點不滿足堆的性質,因此每次交換之後要重新對被交換的孩子節點進行調整)

最開始的這個堆,然後對這個堆進行排序

技術分享

技術分享

技術分享

(考研)(精華)二叉樹的知識結構圖以及各種特殊的二叉樹