六、樹和二叉樹--(0)什麼是樹

摘自計蒜客:http://www.jisuanke.com/course/35/1387

樹形結構廣泛存在我們的現實生活裏,下面兩張圖你一定不陌生吧,第一張是 Linux 文件系統結構,第二張是美國福特汽車公司的汽車家譜圖。類似的樹形結構還有很多,他們都可以抽象成數據結構裏的樹。和自然界裏的樹有所類似又有所不同,他們都有且僅有一個樹根,樹上的元素都是從樹根衍生出來的。不同的是自然界裏的樹,它的樹根在下面,而數據結構裏的樹,樹根在上面。



下面我們利用第一個例子來介紹幾個和樹相關的概念。

樹是由若干個有限結點組成的一個具有層次關係的集合,每棵樹有且僅有一個,比如在圖中,最上面的結點就是樹的根結點。例子裏的“/”、“etc”、“usr”、“lib”等等都是這棵樹上的結點,其中“/”是樹的根結點。

圖中某個結點及其下面的所有結點並稱爲以該結點爲根的子樹,例如“usr”、“lib”、“bin”就是“/”的一棵子樹,“usr”是該子樹的根。結點擁有的子樹個數我們稱爲結點的度,比如結點“/”的度爲 7,“home”的度爲 3。在例子中,我們稱“usr”是“lib”、“bin”的父親,“lib”、“bin”是“usr”的孩子。沒有孩子的結點,也就是度爲 0 的結點我們稱爲葉子,例如“etc”、“lib”、“bin”都是葉子結點。

我們規定根結點是樹的第一層,樹根的孩子結點是樹的第二層,以此類推,樹的深度就是結點的最大層數,例如例子裏的樹,它的深度爲 4。

下面我們用第二個例子簡單複習下這幾個概念,從圖上,我們可以看到這是一棵以“美國福特汽車公司”爲根結點,深度爲 3 的樹;“馬自達”、“俊郎”是以“美國福特汽車公司”爲根結點的一棵子樹;“美國福特汽車公司”度爲 8,“路虎”度爲 0;“美國福特汽車公司”是“阿斯頓馬丁”、“路虎”、“捷豹”等的父親,“阿斯頓馬丁”、“路虎”、“捷豹”是“美國福特汽車公司”的孩子;“路虎”、“野馬”、“雷鳥”等都是樹的葉子結點。

通過這兩個例子的學習,我們可以發現樹的一些性質:

每棵樹有且僅有一個根結點;

在樹上,從一個結點出發可以訪問到其餘的結點,並且一個結點到另一個結點的路徑有且僅有一條;

父親結點可以有多個孩子結點,除根結點外,其餘的結點有且僅有一個父親結點;

根結點沒有父親結點,葉子結點沒有孩子結點。


發佈了6 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章