挑戰408——數據結構(16)——樹的概念

從這一篇開始,進入一種新的數據結構,稱爲樹。其實在學習樹之前我們就接觸過這個結構。

樹的概念

現在我們從一幅圖中來了解一下什麼是樹狀結構:
在這裏插入圖片描述
這幅圖主要說明cart這個單詞的所有可能的組合結構,按照常理,我們先考慮三個字母的排列,然後由三個字母的排列中再進行拆分,最後重複拆分直到僅有一個字母。這個套路是不是很像我們之前學過的devide —— conquer算法?對的,這是一個遞歸的過程,也是計算機最喜歡的算法。所以樹狀結構是很符合計算機邏輯的一種數據結構。
樹,是節點(note)的集合(A tree is a collection of nodes),記得高中學集合的時候,集合是允許一個元素都沒有的集合,稱爲空集。那麼樹是不是允許一個節點都沒有的呢?是的,一個節點都沒有的樹,我們稱之爲空樹(empty tree)。如果樹不是空的,則會存在“根”節點 r 和零個或更多非空子樹T1,T2,…,Tk,它們的根由來自r的有向邊連接。什麼叫有向邊?如果不想像離散數學學的那麼深入,可以理解爲箭頭。樹通常可以表示爲層級關係:
在這裏插入圖片描述
下圖說明了樹之間的內部的關係:
在這裏插入圖片描述

  • 根節點(root):一棵樹只有一個根節點,所有的節點都在該節點的下面。嘗試把圖倒過來看,就可以看成一個我們日常見到的樹的根部。在這裏顯然 A 字母就是這棵樹的根節點。
  • 子節點(child)與父節點(parent):一個節點,它對應的下面有邊連着的節點,那麼被連着的節點就是這個節點的子節點,也叫孩子。那麼這個節點叫做被連接的節點的父親。很難轉過來?那麼就看看這圖吧。B 被 A 連着,所以B是A的一個孩子,同理 C D E等等這一行都是A的孩子。我們再看看F,它連着K L M 同時被A連着,那麼F是A的一個孩子,同時又是K L M的父親。
  • 樹葉(leaves):樹葉就是些沒有孩子的節點,比如 B, C ,D等等。就比如下圖的綠色部分 。
    在這裏插入圖片描述
  • 兄弟(siblings):按照我們的理解,同一個父母生的當然就是兄妹啦。看圖,顏色相同的都爲兄妹:
    在這裏插入圖片描述

我們同樣可以定義從父親到他的孩子的路徑(path)。下面的例子,我們就取上圖的樹的一部分(一個子樹),作爲例子:
在這裏插入圖片描述
比如A -> O的路徑爲 A -> E -> J -> O,它的長度爲3(實際爲它的邊樹,圖中紅色部分)。

  • 節點的深度(depth of a node):節點的深度是指節點到樹根的長度,看上圖,我們可以輕易的知道,J節點的深度爲2(可以按上面的理解,路徑爲A -> E -> J,邊長爲2)。顯然此時的根節點的深度爲0.
  • 節點的高度(height of a node):高度是從節點到葉子的最長路徑。比如節點F的高度爲1.顯然所有葉子的高度爲0。
  • 樹的高度(height of a tree):樹的高度是根的高度(顯然在這圖中,樹的高度是3,A -> O)。

樹的結構

現在讓我們來思考一下,樹有啥特點。

  1. 按照正常邏輯,一個人不能同時有兩個父親,所以樹也是一樣的,一個節點不能含有兩個父節點。下面的兩個圖就說明了這個問題(它們都不是樹):
    在這裏插入圖片描述
  2. 一棵正常的樹,它的樹枝是不會長成一個圓的,所以,樹中是不可能出現環形的,下面的圖就說明了這個問題,紅色箭頭部分就構成了一個環,它們都不是一棵樹(下面的兩幅圖也不是樹):
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章