樹的概念:
樹(英語:tree)是一種抽象數據類型(ADT)或是實做這種抽象數據類型的數據結構,用來模擬具備樹狀結構性質的數據集合。它是由n(n>=1)個有限節點組成一個具備層次關係的集合。把它叫作「樹」是由於它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具備如下的特色:html
- 每一個節點有零個或多個子節點;
- 沒有父節點的節點稱爲根節點;
- 每個非根節點有且只有一個父節點;
- 除了根節點外,每一個子節點能夠分爲多個不相交的子樹;
好比說:
mysql
樹的術語
- 節點的度:一個節點含有的子樹的個數稱爲該節點的度;
- 樹的度:一棵樹中,最大的節點的度稱爲樹的度;
- 葉節點或終端節點:度爲零的節點;
- 父親節點或父節點:若一個節點含有子節點,則這個節點稱爲其子節點的父節點;
- 孩子節點或子節點:一個節點含有的子樹的根節點稱爲該節點的子節點;
- 兄弟節點:具備相同父節點的節點互稱爲兄弟節點;
- 節點的層次:從根開始定義起,根爲第1層,根的子節點爲第2層,以此類推;
- 樹的高度或深度:樹中節點的最大層次;
- 堂兄弟節點:父節點在同一層的節點互爲堂兄弟;
- 節點的祖先:從根到該節點所經分支上的全部節點;
- 子孫:以某節點爲根的子樹中任一節點都稱爲該節點的子孫。
- 森林:由m(m>=0)棵互不相交的樹的集合稱爲森林;
樹的種類
- 無序樹:樹中任意節點的子節點之間沒有順序關係,這種樹稱爲無序樹,也稱爲自由樹;
- 有序樹:樹中任意節點的子節點之間有順序關係,這種樹稱爲有序樹;
- 二叉樹:每一個節點最多含有兩個子樹的樹稱爲二叉樹;
- 徹底二叉樹:對於一顆二叉樹,假設其深度爲d(d>1)。除了第d層外,其它各層的節點數目均已達最大值,且第d層全部節點從左向右連續地緊密排列,這樣的二叉樹被稱爲徹底二叉樹,其中滿二叉樹的定義是全部葉節點都在最底層的徹底二叉樹;
- 平衡二叉樹(AVL樹):當且僅當任何節點的兩棵子樹的高度差不大於1的二叉樹;
- 排序二叉樹(二叉查找樹(英語:Binary Search Tree),也稱二叉搜索樹、有序二叉樹);
- 霍夫曼樹(用於信息編碼):帶權路徑最短的二叉樹稱爲哈夫曼樹或最優二叉樹;
- B樹:一種對讀寫操做進行優化的自平衡的二叉查找樹,可以保持數據有序,擁有多餘兩個子樹。
樹的存儲與表示
順序存儲:將數據結構存儲在固定的數組中,然在遍歷速度上有必定的優點,但因所佔空間比較大,是非主流二叉樹。二叉樹一般以鏈式存儲。算法

鏈式存儲:sql

因爲對節點的個數沒法掌握,常見樹的存儲表示都轉換成二叉樹進行處理,子節點個數最多爲2數據庫
常見的一些樹的應用場景
1.xml,html等,那麼編寫這些東西的解析器的時候,不可避免用到樹
2.路由協議就是使用了樹的算法
3.mysql數據庫索引
4.文件系統的目錄結構
5.因此不少經典的AI算法其實都是樹搜索,此外機器學習中的decision tree也是樹結構數組

感謝您的閱讀「這是做者的學習筆記」存在不少錯誤;還望您且看且思。