10、樹

作者:whj95

導讀

樹的定義

  沒有簡單迴路 連通 無向圖(回憶簡單圖:沒有重複邊)
  簡單理解,無環 無多重邊 連通
  樹的高度:以根節點爲0層,到樹葉的最長路徑爲樹的高度
  平衡(balanced):所有樹葉都在h或h-1層
  

樹的種類

  這裏寫圖片描述
  m元樹: 每個內點不超過m個子女
  正則m元樹: 每個內點恰好等於m個子女
  二叉樹: 正則2元樹

樹的性質

  ①n個頂點n-1個邊
  ②有着i個內點的正則m元樹有n= mi + 1頂點(所有子正則m元樹+根)
  ③根據2和n= l+i(n爲頂點數,l爲葉子數,i爲內點數)
  ④高度爲h的m元樹中至多mh個樹葉

樹的運用

哈夫曼編碼

  ①選出當前最小的兩個權值構成較小的樹,樹葉左大右小放置,根節點記下權值和樹枝左0右1
  ②把生成的樹新的權值插入隊伍,重複①
  ③編碼即爲從根節點到路徑的01編碼平均位數就爲權值乘以長度
  例子如下:
這裏寫圖片描述

樹的遍歷 TreeTraversal

遍歷

  下面的前中後序的前中後都是描述對的優先級,每移動一步都要重置指令:
  首先貼個萬能的例題,然後在不同的排序方法中展示它的不同:
  這裏寫圖片描述
  前序遍歷(Preorder):優先級即根左右,例題的排序就爲:a,b,e,j,k,n,o,p,f,c,d,g,l,m,h,i
  中序遍歷(Inorder):優先級即左根右,例題的排序就爲:j,e,n,k,o,p,b,f,a,c,l,g,m,d,h,i
  後序遍歷(Postorder):優先級即左右根,例題的排序就爲:j,n,o,p,k,e,f,b,c,l,m,g,h,i,d,a

記法及讀法

前綴記法(Prefix Notation)
  記法:
  這裏寫圖片描述
  讀法:從後向前讀
  這裏寫圖片描述
    
後綴記法(Postfix Notation):
  記法:
  這裏寫圖片描述
  讀法:從前往後
  這裏寫圖片描述
  
中綴記法(Infix Notation):
  給出一箇中綴表達式:
    a+b*c-(d+e)
  第一步:
    按照運算符的優先級對所有的運算單位加括號,式子變成:
    ((a+(b*c))-(d+e))
  第二步:
    轉換前綴:把運算符號移動到對應的括號前面則變成拉:-( +(a *(bc)) +(de))把括號去掉:
    -+a*bc+de
    轉換後綴:把運算符號移動到對應的括號後面則變成拉:((a(bc)* )- (de)+ )+把括號去掉:
    abc*-de++
  

生成樹 Spanning Trees

  定義:包含原圖中所有頂點無環 無多重邊 連通
  廣度優先搜索(Breadth First Search):橫向遍歷,以爲單位一層一層地深究到最右方,然後跳至下一行最左端。
  簡言之,目光短淺一手抓
  
  深度優先搜索(Depth First Search):縱向遍歷,以“”爲單位從左向右一豎一豎地深究到最底端,到達最底端後返回根節點,遍歷新一豎的列。
  簡言之,一條路走到黑
  舉個萬能的例子:
  這裏寫圖片描述
  以f爲起點,BFS第一步是d,e,g,h
  以f爲起點,DFS第一步是h,k,j(其中一種)

最小生成樹 Minimum Spanning Trees

普林算法( Prim’s Algorithm)

  ①選擇權值最小的一條邊記下兩端端點加入隊列
  ②找出與隊列中任一端點有關的所有邊,選擇權值最小的,記下其端點
  ③重複②並且不形成迴路,直到遍歷了所有頂點(出現生成樹)
  給個例子:
  這裏寫圖片描述
 

克魯斯卡爾算法( Kruskal’s Algorithm)

  與Prim Algorithm唯一區別是不定死要求要找與點聯繫的邊,把邊以權值從小到大排序,從上到下挑選直至挑選完所有頂點且之前不形成迴路
  這裏寫圖片描述

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