python數據結構-樹的基本定義

        樹在計算機科學的許多領域中使用,包括操作系統,圖形,數據庫系統和計算機網絡。樹數據結構與他們的植物表親有許多共同之處。樹數據結構具有根,分支和葉。自然界中的樹和計算機科學中的樹之間的區別在於樹數據結構的根在頂部,其葉在底部。

        第一個例子:一些動物的生物分類的實例,

        第一個屬性是樹是分層的。通過分層,我們的意思是樹的層次結構,更接近頂部的是抽象的東西和底部附近是更具體的東西。層次結構的頂部是Kingdom ,樹的下一層(上面的層的“Children”)是 Phylum ,然後是 Class ,等等。然而,無論我們在分類樹中有多深,所有的生物仍然是 animals 。

        第二個屬性是一個節點的所有子節點獨立於另一個節點的子節點。例如,Felis 有屬於Domestica 和 Leo 的孩子。Musca 也有一個名爲 Domestica 的孩子,但它是一個不同的節點,並獨立於 Felis 的 Domestica孩子。這意味着我們可以改變作爲 Musca 的孩子的節點而不影響 Felis 的孩子。

        第三個屬性是每個葉節點是唯一的。我們可以指定從樹的根到唯一地識別動物王國中的每個物種的葉的路徑;


        第二個例子:用HTML編寫的簡單網頁的示例

        HTML源代碼和伴隨源的樹說明了另一個層次結構。請注意,樹的每個級別都對應於HTML標記內的嵌套級別。源中的第一個標記是 ,最後一個是 頁面中的所有其餘標記都是成對的。 如果你檢查,你會看到這個嵌套屬性在樹的所有級別都是 true。 




我們已經看了樹的示例,我們將正式定義樹及其組件

        節點

        節點是樹的基本部分。它可以有一個名稱,我們稱之爲“鍵”。節點也可以有附加信息。我們將這個附加信息稱爲“有效載荷”。雖然有效載荷信息不是許多樹算法的核心,但在利用樹的應用中通常是關鍵的。

        邊

        邊是樹的另一個基本部分。邊連接兩個節點以顯示它們之間存在關係。每個節點(除根之外)都恰好從另一個節點的傳入連接。每個節點可以具有多個輸出邊。

        根

        樹的根是樹中唯一沒有傳入邊的節點。

        路徑

        路徑是由邊連接節點的有序列表。例如,Mammal→→Carnivora→→Felidae→→Felis→→Domestica是一條路徑。

        子節點

        具有來自相同傳入邊的節點 c 的集合稱爲該節點的子節點。

        父節點

        具有和它相同傳入邊的所連接的節點稱爲父節點。

        兄弟

        樹中作爲同一父節點的子節點的節點被稱爲兄弟節點。子樹子樹是由父節點和該父節點的所有後代組成的一組節點和邊。葉節點

        子樹

        子樹是由父節點和該父節點的所有後代組成的一組節點和邊。

        葉節點

        葉節點是沒有子節點的節點。

        層數

        節點 n 的層數爲從根結點到該結點所經過的分支數目。 例如,圖1中的Felis節點的級別爲五。根據定義,根節點的層數爲零。高度樹的高度等於樹中任何節點的最大層數。現在已經定義了基本詞彙,我們可以繼續對樹的正式定義。 事實上,我們將提供一個樹的兩個定義。 一個定義涉及節點和邊。 第二個定義,將被證明是非常有用的,是一個遞歸定義。

        定義一:樹由一組節點和一組連接節點的邊組成。樹具有以下屬性:樹的一個節點被指定爲根節點。除了根節點之外,每個節點 n 通過一個其他節點 p 的邊連接,其中 p 是 n 的父節點。從根路徑遍歷到每個節點路徑唯一。如果樹中的每個節點最多有兩個子節點,我們說該樹是一個二叉樹。

        定義二:樹是空的,或者由一個根節點和零個或多個子樹組成,每個子樹也是一棵樹。每個子樹的根節點通過邊連接到父樹的根節點。






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