樹的定義數組
樹和圖同樣都是非線性結構,樹是n個結點的有限集合,當n=0時,稱這棵樹爲空樹。 非空樹有如下特徵:數據結構
- 有且僅有一個稱爲根的結點。
- 若是n>1, 除根結點之外其它結點能夠分爲m(m>0)個不相交的集合T1,T2,T3,T4,......,Tm,其中每個集合都是一棵樹。樹T1, T2, T3,......,Tm稱爲這棵對的子樹。
下圖就是一棵普通的樹:spa

相關術語3d
- 節點:樹是由有限個元素組成的集合,每人元素都稱做一個節點,上圖A、B、 C、 D、 E、 F、G、H、I等都是樹的節點;
- 節點的度:一個節點含有的子樹的個數稱爲該節點的度;
- 葉節點或終端節點:度爲0的節點稱爲葉節點,D,E,C,G都是葉節點;
- 非終端節點或分支節點:度不爲0的節點;
- 子節點(孩子節點): 一個節點含有的子樹的根節點稱爲該節點的子節點;
- 父節點(雙親節點):若一個節點含有子節點,則這個節點稱爲其子節點的父節點;
- 兄弟節點:具備相同父節點的節點互稱爲兄弟節點;
- 堂兄弟節點:雙親在同一層的節點互爲堂兄弟;
- 節點的祖先:從根到該節點所經分支上的全部節點;
- 子孫節點:以某節點爲根的子樹中任一節點都稱爲該節點的子孫;
- 森林:由m(m>=0)棵互不相交的樹的集合稱爲森林;
- 樹的度:一棵樹中,最大的節點的度稱爲樹的度;
- 節點的層次:從根開始定義起,根爲第1層,根的子節點爲第2層,以此類推;
- 樹的高度或深度:樹中節點的最大層次;
樹的分類blog
- 有序樹:樹的各個子樹的順序是固定的,不能隨意改變順序。
- 無序樹:樹的各個子樹的順序可變。
- 二叉樹: 每一個節點最多隻能有兩個子節點的樹稱爲二叉樹,二叉樹是有序樹,左右子樹的順序不能改變。二叉樹又能夠分爲滿二叉樹和徹底二叉樹。
- B樹
- 霍夫曼樹
樹的存儲內存
計算機的內存是線性的, 而樹是非線性的數據結構,如何將非線性的樹狀結構在線性的內存中存儲起來,這是一個值得探討的問題。目前主要有如下幾種存儲方式:二叉樹
一、雙親表示法:終端
- 實現:一般用一個二維數組,在存儲結點的同時也將對應節點的父節點存儲進來。
- 特色:找父節點容易、找子節點難。

二、 孩子表示法:方法
- 實現:每一個結點都存儲在一個二維數組的第一列裏面,多個子節點之間以鏈表方式鏈接,最後一個子節點的指向爲NULL,數組的第二個元素指向其子節點鏈表的起始地址。
- 特色:找子節點容易,找父節點難。

三、 雙親孩子表示法:im
- 實現:將雙親表示法與孩子表示法綜合起來,既存儲父節點的下標,又指向子節點鏈表。
- 特徵:找父節點與子節點都比較方便,但相對前面兩種複雜度有必定程度的提高。

四、二叉樹存儲:
- 二叉樹存儲就是將普通的樹轉換成二叉樹後再進行存儲,二叉樹的存儲將另做討論。
- 將普通樹轉換成二叉樹有一個方法,左孩子右兄弟法,就是說從根節點開始,每一個節點的左子節點存儲它的一個孩子,右子節點存儲它的一個兄弟,以下圖所示:

森林的存儲
森林是由多棵互不相交的樹組成的集合,存儲方式與樹轉換成二叉樹存儲方式相似。
- 將森林中的每一棵對都轉換成對應的二叉樹。
- 將第二棵二叉樹做爲每一棵二叉樹根節點的右孩子,將第三棵二叉樹做爲第二棵二叉樹根節點的右孩子,依次類推,最終獲得的二叉樹就是由森林轉換成的二叉樹。

關於本文
主要介紹了一下樹的相關概念和術語以及樹和森林的存儲方法等相關知識,本人才疏學淺,疏漏或者錯誤之處在所不免,歡迎你們批評指正。