資料結構複習(十二)之平衡二叉樹及哈夫曼樹
平衡二叉樹需要保證在插入和刪除二叉樹結點時,任意結點的左、右子樹的高度差絕對值不超過1,所以平衡二叉樹或者為一棵空樹,或者為具有左子樹和右子樹都為平衡二叉樹的性質。插入和刪除時出現不滿足條件時可進行一定的調整,分為LL平衡旋轉、RR平衡旋轉、LR平衡旋轉、RL平衡杆旋轉。
哈夫曼樹又稱為最優二叉樹,使得帶權路徑長度WPL最小,哈夫曼樹的構造可以按照哈夫曼演算法:
1)將這N個結點分別作為N棵僅含一個結點的二叉樹,構成森林F。
2)構造一個新結點,並從F中選取兩棵根結點權值最小的樹作為新結點的左、右子樹,並且將新結點的權值置為左、右子樹上根結點的權值之和。
3)從F中刪除剛才選出的兩棵樹,同時將新得到的樹加入F中。
4)重複步驟2)和3),直至F中只剩下一棵樹為止。
從上述構造過程中可以看出哈夫曼樹具有如下特點:
1)每個初始結點最終都成為葉結點,並且權值越小的結點到根結點的路徑長度越大。
2)構造過程中共新建了N-1個結點(雙分支結點),因此哈夫曼樹中結點總數為2N-1。
3)每次構造都選擇2棵樹作為新結點的孩子,因此哈夫曼樹中不存在度為1的結點。
相關推薦
資料結構複習(十二)之平衡二叉樹及哈夫曼樹
平衡二叉樹需要保證在插入和刪除二叉樹結點時,任意結點的左、右子樹的高度差絕對值不超過1,所以平衡二叉樹或者為一棵空樹,或者為具有左子樹和右子樹都為平衡二叉樹的性質。插入和刪除時出現不滿足條件時可進行一定的調整,分為LL平衡旋轉、RR平衡旋轉、LR平衡旋轉、RL平衡杆旋轉。
資料結構之二叉樹應用(哈夫曼樹及哈夫曼編碼實現)(C++)
一、哈夫曼樹1.書上用的是靜態連結串列實現,本文中的哈夫曼樹用 排序連結串列 實現;2.實現了從 字元頻率統計、構建權值集合、建立哈夫曼樹、生成哈夫曼編碼,最後對 給定字串的編碼、解碼功能。3.使用到的 “SortedList.h”標頭檔案,在上篇博文:資料結構之排序單鏈表。
【資料結構】哈夫曼樹及哈夫曼編碼
哈夫曼樹 給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。 樹節點間的邊相關的數叫做權。 從樹
滿二叉樹、完全二叉樹、平衡二叉樹、哈夫曼樹
滿二叉樹:除了葉節點外每一個結點都有左右子女且葉節點都處在最底層的二叉樹。 這個滿二叉樹應該很好想象,就是一顆非常完美的樹,除了葉節點其他節點都有兩個孩子。 完全二叉樹:只有最下面的兩層結點度小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。 也
資料結構期末複習知識查漏補缺並配(帶詳解的)查漏習題(B樹,雜湊(雜湊),平衡二叉樹,KMP)
一.B樹(也叫B-)與B+樹專題 (1)B樹 重點總結: 1.結點最大的孩子數目稱為B樹的階。所以,2-3樹是3階B樹,2-3-4樹是3階B樹 2.所有葉節點位於同一層次 3. 4.,一般均是升序或降序 5.在B樹上查詢的過程是一個順指標查詢結點和在
※資料結構※→☆非線性結構(tree)☆============哈夫曼樹 順序儲存結構(tree Huffman sequence)(二十二)
/** @(#)$Id: AL_TreeHuffmanSeq.h 70 2013-10-08 10:31:44Z xiaoting $ @brief Tree (tree) that contains n (n> 0) nodes of a finite set, where: (1) E
資料結構之哈夫曼樹(最優二叉樹)
文字壓縮是一種非常重要的技術,自然涉及到了壓縮編碼。哈夫曼編碼——一種最基本的壓縮編碼方法 幾個術語: 1、路徑:樹中兩個節點之間的分支序列 2、路徑長度:路徑上的分支數目
C語言入門(十九)之結構體
太晚了(11點半了),明天繼續結構體 陣列: 是用於儲存一組相同型別的資料 結構體: 是用於儲存一組不同型別的資料 // 1.定義結構體型別 struct Person { // char name[20]; char *name;
線性表及其應用C語言實現(資料結構複習最全筆記)
一、順序表的表示與實現 1.線性表的順序結構定義 #define LIST_INIT_SIZE 100 //線性表儲存空間的初始分配量 #define LISTINCREMENT 10 //線性表儲存空間的分配增量 typedef struct { ElemType* el
資料結構複習(1)
1.***程式=演算法+資料結構 2.演算法的五個特性:有窮性,確定性,可行性,輸入,輸出 衡量一個演算法要從‘正確性’,‘可讀性’,‘健壯性’,‘效率與低儲存量需求’來考慮 3.時間複雜度與空間複雜度直觀的反映了優劣,不同的演算法可以實現相同的功能我們可以用時間複雜度來衡量一個演算法的好壞
排序及其應用C語言實現(資料結構複習最全筆記)(期末複習最新版)
排序 關於排序給兩篇不錯的部落格參考: http://www.cnblogs.com/eniac12/p/5329396.html https://www.cnblogs.com/eniac12/p/5332117.html 知識前提 關於內外排序 內排序:指在排序
查詢及其應用C語言實現(資料結構複習最全筆記)
所謂查詢(Search)又稱檢索,就是在一個數據元素集合中尋找滿足某種條件的資料元素。查詢在計算機資料處理中是經常使用的操作。查詢演算法的效率高低直接關係到應用系統的效能。查詢的方法很多,本章將介紹一些常用的查詢演算法,主要有:線性表的查詢、樹表的查詢和散列表的查詢,並對有關的演算法進行效能分析
圖及其應用c語言實現(資料結構複習最全筆記)(期末複習最新版)
圖 一.圖的基本概念 1.圖的定義 圖是由頂點(vertex)集合及頂點間的關係組成的一種資料結構。Graph=(V,E)Graph=(V,E)其中,頂點集合 V={x|x∈某個物件資料集}V={x|x∈某個物件資料集} 是有窮非空集合;E={(x,y)|x,y∈V}E={(x,y
樹及其應用c語言實現(資料結構複習最全筆記)
樹 一.樹的基本概念 二.二叉樹 1.二叉樹的定義 2.二叉樹的性質 此外在這裡在介紹下完美二叉樹的概念及重要性質 完全二叉樹是效率很高的資料結構,完全二叉樹是由滿二叉樹而引出來的。對於深度為K的,有n個結點的二叉樹,當
大資料WEB階段(十五)JavaEE三大核心技術之過濾器
Filter過濾器 一、Filter 過濾器概述 Filter是JavaEE三大核心技術(Servlet 、 Filter 、 Listener)之一 FIlter作用是攔截對資源的訪問 , 攔截下來後可以控制是否允許通過 , 或者在允許通過前後做
資料結構之哈夫曼樹(c語言)
哈夫曼樹 利用靜態連結串列建立赫夫曼樹,建樹過程中要求左子樹權值小於右子樹權值,求各結點的編碼。要求:葉子結點的個數n及結點值由鍵盤錄入。本題給出程式程式碼,要求修改以滿足測試要求. #include "stdio.h" #include "malloc.h" #in
資料結構(三):非線性邏輯結構-特殊的二叉樹結構:堆、哈夫曼樹、二叉搜尋樹、平衡二叉搜尋樹、紅黑樹、線索二叉樹
/* 性質1. 節點是紅色或黑色 性質2. 根是黑色 性質3. 每個紅色節點的兩個子節點都是黑色 (從每個葉子到根的所有路徑上不能有兩個連續的紅色節點) 性質4. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點 */ #include #include typedef enum
一本正經的聊資料結構(6):最優二叉樹 —— 哈夫曼樹
![](https://cdn.geekdigging.com/DataStructure/head.png) 前文傳送門: [「一本正經的聊資料結構(1):時間複雜度」](https://www.geekdigging.com/2020/03/28/6072951828/) [「一本正經的聊資料結構(
Python爬蟲從入門到放棄(十一)之 Scrapy框架整體的一個了解
object 定義 roc encoding eth obi pipe pos 等等 這裏是通過爬取伯樂在線的全部文章為例子,讓自己先對scrapy進行一個整理的理解 該例子中的詳細代碼會放到我的github地址:https://github.com/pythonsite/
Python爬蟲從入門到放棄(十八)之 Scrapy爬取所有知乎用戶信息(上)
user 說過 -c convert 方式 bsp 配置文件 https 爬蟲 爬取的思路 首先我們應該找到一個賬號,這個賬號被關註的人和關註的人都相對比較多的,就是下圖中金字塔頂端的人,然後通過爬取這個賬號的信息後,再爬取他關註的人和被關註的人的賬號信息,然後爬取被關註人