数据结构——树、二叉树、森林、哈夫曼树、字符串模式匹配
?
%%%%%%
字符串模式匹配算法--詳解KMP算法
https://blog.csdn.net/zc474235918/article/details/40474525
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
%%%%%%
樹的定義和基本術語
其實是一個遞歸的定義。每個有限集也是一個樹。
?
樹的抽象數據類型ADT
數據對象D:具有相同特征的數據元素的集合
數據關系R:
?
其他表示方法:
集合的圓圈方法、層次的目錄
?
?
?二叉樹
左右之分。有序樹。
完全二叉樹 節點數為10 的話,必須連續的1-10,中間不能斷。
性質4中log為向下取整。
順序結構:對滿二叉樹比較好。 非完全二叉樹,沒有元素就為空。空間浪費。
鏈域:就是地址
空鏈域就是沒有孩子的地址。
n個節點有2n個鏈域。 有n-1個分支,每個分支就是一個地址,就是一個鏈域。2n-(n-1)=n+1個空鏈域。
?
?
遍歷二叉樹
先序就是先根。
遍歷都是遞歸的思想。
上面:
函數指針作為函數參數傳遞:https://www.cnblogs.com/jainszhang/p/10704514.html
?
二叉鏈表的存儲形式
?
棧的數據結構實現中序遍歷:
和下面先序只是訪問元素的時機不同。其他都相同。VIsit函數位置不同。
先序是入棧的時候就訪問根節點。 中序是出棧的時候才訪問節點。
?
線索二叉樹
二叉樹為非線性結構 用一種方法 讓它線性化
線性序列 ?按照某一種遍歷的方法 排列成一個順序。
?
n個節點,肯定有n-1個分叉,有n-1個節點有唯一雙親,1個根節點沒有雙親。
有2n個鏈域,所以2n-(n-1)個空鏈域。所以有n+1個空鏈域。
?
?
a + b * - - - - e / f
線索化的目的是給空的鏈域 變為 非空。 可以通過中序、先序等方法來實現線索化。
?
?
層次遍歷:
?
?
樹和森林
數組下標為雙親的位置。
?
數組存放data和右邊一個指針域,為一個單鏈表,下標指向孩子的位置
?
孩子雙親表示法:
左邊為雙親位置,右邊為孩子位置,感覺這個圖和上面二叉樹的圖不對應。
孩子兄弟表示法:
森林和二叉樹的對應關系:
?
樹和森林的遍歷
?
下面一個例題很不錯:
?
哈夫曼樹以及其應用
注意:葉子節點是最外面的節點,度為0。
中間的叫分支節點。
權值作為葉子節點構造哈夫曼樹。
簡單的說就是不斷找當前最小權值的兩個樹。
?
n個葉子節點。剩下節點為n-1個。共有2n-1個節點。為嚴格二叉樹。
哈夫曼編碼:左孩子為0,右邊為1
?
?
?
總結
以上是生活随笔為你收集整理的数据结构——树、二叉树、森林、哈夫曼树、字符串模式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPM傅里叶叠层衍射成像笔记
- 下一篇: 数据结构——图:极大小连通子图、图的存储