Java數據結構--樹

一、樹的概念

xxx班的學生信息表如圖1.1所示,其中學生分別分到了不同的學習小組,第一組組長是李華,組員有王麗、張陽、趙斌;第二組組長是孫琪,組員有馬丹;第三組組長是劉暢,組員有周天、黃凱。

在這裏插入圖片描述

這些信息構成了一顆樹,如圖1.2所示。這就是一種典型的數據結構–樹。要實現學生組員的插入、刪除、查找等操作,就要用到樹的相關知識。

在這裏插入圖片描述

1.1 樹的概念

樹是零個或多個結點的有限集合。結點樹爲0的數稱爲空樹,結點樹大於0的數稱爲非空樹。在一顆樹中:
1)有且僅有一個特定的稱爲跟的結點。
2)當結點數大於1時,除根結點外,其他結點被分成n(n > 0)個互不相交的子集:T1,T2,T3,…,Tn,其中每個子集本身又是一顆樹(稱爲子樹),每一棵子樹的根xi (1 ≤ i ≤ n)都是根結點root的後續,樹T1,T2,… ,Tn稱爲根的子樹。

1.2 樹的基本語術

結點的度:指結點擁有的子樹的數目。
葉子或終端結點:指度爲0的結點。
非終端結點或分支結點:指度不爲0的結點。
樹的度:指樹內各結點度的最大值。
孩子和雙親:某個結點的子樹的根稱爲該結點的孩子,相應的,該結點稱爲孩子的雙親。
兄弟:同一個雙親的孩子結點互爲兄弟。
結點的層次:規定根所在的層次爲第一層,根的孩子在第二層以此類推。
樹的深度或高度:樹中結點最大的層數。
有序數:指數中結點的各子樹從左到右是有次序的,否則稱爲無序樹。
深林:指n(n ≥ 0)棵互不相交的樹的集合。
根據樹的概念可知:樹中任一個結點都可以有零個或多個後續結點(孩子),但是最多隻能有一個前趨結點(雙親);根結點無雙親,葉子結點無孩子;祖先與子孫的關係是父子關係的拓展;有序樹中兄弟結點之間從左至右有次序之分。

二 、樹的邏輯表示方法

樹的常用表示方法有以下四種:樹形圖法、嵌套集合法、廣義表表示法和凹入表示法。

2.1 樹形圖法

圖2.1給出了圖形表示樹的直觀表示法,其中用圓圈表示接點,連線表示結點間的關係,並把樹根畫在上面。樹形圖法主要用於直觀描述樹的邏輯結構。

在這裏插入圖片描述

2.2 嵌套集合表示法

嵌套集合法採用集合的包含關係表示樹,如圖2.2所示
在這裏插入圖片描述

2.3 廣義表表示法

廣義表表示法以廣義表的形式表示樹,利用廣義表的嵌套區間表示樹的結構。如A(B, C(E, F), D(G))。

2.4 凹入表示法

凹入表示法採用逐層縮進的方式表示樹,有橫向凹入表示和豎向凹入表示。如圖2.4所示爲橫向凹入表示。

在這裏插入圖片描述

三、 樹的存儲結構

存儲樹時,即要存儲結點的數據元素,又要存儲結點之間的邏輯關係。結點之間的邏輯關係有:雙親-孩子關係、兄弟關係。因此,採用樹的存儲結構主要有雙親表示法、孩子表示法、雙親孩子表示法和孩子兄弟表示法。

3.1 雙親表示法

使用指針表示每個結點的雙親結點,即雙親表示法。每個結點包含兩個域:數據域和指針域。雙親表示法存儲如圖3.1所示

在這裏插入圖片描述
在這裏插入圖片描述
在常規指針表示法中,每一個節點是一個結構,包含兩個域:數據域和指針域。指針域指向該節點的雙親節點,沒有雙親節點的指針域是空指針域。在仿真指針表示法中,每個節點是數組的一個元素,每個元素也包含數據域和指針域,但是指針域存放的是雙親節點所在的數組下標地址(即仿真指針),沒有雙親節點的指針域爲-1。
雙親表示法多查找一個節點的雙親節點及祖先節點的操作十分便利,但是查找其孩子結點並不方便。

3.2 孩子表示法

使用指針表示出每個結點的孩子結點,即孩子表示法。由於每個結點的孩子結點個數不同,爲了簡便起見,孩子表示法中的每個結點的指針域個數是樹的度。圖3.2是孩子表示法採用常規指針表示的存儲結構。

孩子表示法與雙親表示法的特點相反。孩子表示法可方便地找到一個結點的孩子及其後裔,並能方便地實現樹的遍歷。

在這裏插入圖片描述

3.3 雙親孩子表示法

採用雙親表示法和孩子表示法的優勢,使用指針即表示出每個結點的雙親結點,又表示出每個結點的孩子結點,就是雙親孩子表示法。指針域即包括指向孩子的指針,也包括指向雙親結點的指針。圖3.3是雙親孩子表示法採用常規指針表示的存儲結構,其中藍線表示孩子指針,紅線表示雙親指針。
在這裏插入圖片描述

3.4 孩子兄弟表示法

使用指針即指向每個結點的孩子結點,又指向每個結點的兄弟結點,就是孩子兄弟表示法。指針域包含兩個指針,指向孩子結點的指針和指向最鄰近兄弟結點的指針。
圖3.4是常規指針表示的存儲結構,其中藍線表示孩子指針,紅線表示兄弟指針。
在這裏插入圖片描述

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