二叉樹

? 樹(英語:tree)是一種抽象數據類型(ADT)或是實做這種抽象數據類型的數據結構,用來模擬具備樹狀結構性質的數據集合。它是由n(n>=1)個有限節點組成一個具備層次關係的集合。把它叫作「樹」是由於它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。
? 它具備如下的特色:
○ 每一個節點有零個或多個子節點;
○ 沒有父節點的節點稱爲根節點;
○ 每個非根節點有且只有一個父節點;
○ 除了根節點外,每一個子節點能夠分爲多個不相交的子樹;
? 樹的術語
? 節點的度:一個節點含有的子樹的個數稱爲該節點的度;
? 樹的度:一棵樹中,最大的節點的度稱爲樹的度;
? 葉節點或終端節點:度爲零的節點;
? 父親節點或父節點:若一個節點含有子節點,則這個節點稱爲其子節點的父節點;
? 孩子節點或子節點:一個節點含有的子樹的根節點稱爲該節點的子節點;
? 兄弟節點:具備相同父節點的節點互稱爲兄弟節點;
? 節點的層次:從根開始定義起,根爲第1層,根的子節點爲第2層,以此類推;
? 樹的高度或深度:樹中節點的最大層次;
? 堂兄弟節點:父節點在同一層的節點互爲堂兄弟;
? 節點的祖先:從根到該節點所經分支上的全部節點;
? 子孫:以某節點爲根的子樹中任一節點都稱爲該節點的子孫。
? 森林:由m(m>0)棵互不相交的樹的集合稱爲森林;
? 樹的種類
? 無序樹:樹中任意節點的子節點之間沒有順序關係,這種樹稱爲無序樹,也稱爲自由樹;
? 有序樹:樹中任意節點的子節點之間有順序關係,這種樹稱爲有序樹;
○ 二叉樹:每一個節點最多含有兩個子樹的樹稱爲二叉樹;(重點講解)
§ 徹底二叉樹:對於一顆二叉樹,假設其深度爲d(d>1)。除了第d層外,其它各層的節點數目均已達最大值,且第d層全部節點從左向右連續地緊密排列,這樣的二叉樹被稱爲徹底二叉樹,其中滿二叉樹的定義是全部葉節點都在最底層的徹底二叉樹;
§ 平衡二叉樹(AVL樹):當且僅當任何節點的兩棵子樹的高度差不大於1的二叉樹;
§ 排序二叉樹(二叉查找樹(英語:Binary Search Tree),也稱二叉搜索樹、有序二叉樹);
○ 霍夫曼樹(用於信息編碼):帶權路徑最短的二叉樹稱爲霍夫曼樹或最優二叉樹
○ B樹:一種對讀寫操做進行優化的自平衡的二叉查找樹,可以保持數據有序,擁有多餘兩個子樹
? 常見樹的應用場景
? 1. xml,html等,那麼編寫這些東西的解析器的時候,不可避免用到樹
? 2. 路由協議就是使用了樹的算法
? 3. mysql數據庫索引(B+樹)
? 4. 文件系統的目錄結構
? 5. 不少經典的AI算法其實都是樹搜索
? 二叉樹
? 二叉(杈)樹是每一個節點最多有兩個子樹的樹結構。一般子樹被稱做「左子樹」(left subtree)和「右子樹」(right subtree)
? 二叉樹又能夠細分出「徹底二叉樹」和「滿二叉樹」兩種特殊形態
○ 徹底二叉樹
§ 若設二叉樹的高度爲h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第h層有葉子結點,而且葉子結點都是從左到右依次排布,這就是徹底二叉樹。
○ 滿二叉樹
§ 除了葉結點外每個結點都有左右子葉且葉子結點都處在最底層的二叉樹。
? 二叉樹的遍歷
? 樹的遍歷是樹的一種重要的運算。所謂遍歷是指對樹中全部結點的信息的訪問,即依次對樹中每一個結點訪問一次且僅訪問一次,咱們把這種對全部節點的訪問稱爲遍歷(traversal)。
? 樹的兩種重要的遍歷模式是
○ 深度優先遍歷
○ 先序遍歷(preorder),
○ 中序遍歷(inorder)和
○ 後序遍歷(postorder)
○ 廣度優先遍歷
○ 層次遍歷
從樹的root開始,從上到下從從左到右遍歷整個樹的節點html

相關文章
相關標籤/搜索