---------注:本文所用的術語定義均來自國外大學和計算機文獻使用的定義,非國內教材。層次編號從1開始-------------
樹(generic tree):樹是含有n個結點的有限集,結點(node)通過邊(edge)連線起來,形成樹狀的
非線性結構。
當 n=0時,為空樹。
當 n>0時,僅有乙個特殊的結點叫做根(root)的結點,它位於樹的邏輯形態的最頂層,它沒有父結點。
樹都可以看做是
連通 無環 圖,即樹中的結點都是連通的,且不構成環。
樹中的邊(edge)是隱式有向的,方向從父結點指向他的每乙個孩子結點。parent->children。
樹中的結點,除了根結點外,每乙個結點都有乙個父結點,以及0個或者多個孩子結點。
樹的邏輯結構類似一顆倒立著的真實世界裡的樹。如下圖中,整體是乙個有6個結點的樹。r為樹根,其餘結點又可以找出2棵子樹:子樹1 , 子樹2。子樹1中,結點a又是子樹1的root結點,而結點c 和 結點d又是 子樹1 的2個子樹。
結點(node): 樹中儲存 資料元素以及 結點之間的邏輯連線資訊的資料。圖中使用乙個圓圈表示。
邊(edge):結點與結點之間的邏輯連線,是2個結點構成的二元組。圖中用一條線表示。
路徑(path): 乙個結點和他的某乙個子孫之間的通路,是由結點構成的序列。如(a , b ,e)就是a到e的路徑。路徑長就是這個序列代表的邊數目。
根結點(root):位於樹的邏輯結構的最頂層的結點。下圖的結點a即是。
葉子結點(leaf):沒有任何孩子結點的結點(度為0)。下圖中的d,e,f都是葉子結點。葉子結點又叫外部結點(external)。
內部結點(internal):非葉子結點即為內部結點。
結點的度(degree):結點的子樹的個數,即結點的孩子數。
結點的深度(depth):從root結點到該結點的邊的條數。(在具體實現時,可以求這個結點的祖先的個數作為他的深度,root 的深度是0)
結點的高度(height):從該節點到它能到達的所有葉子的路徑中最長的路徑長度。(葉子結點的高是0)
結點的層次(level):結點到root結點之間的邊數 +1 ,即結點的深度+1
樹的深度(tree depth):最深的葉子結點的深度。(
樹的深度和他的高度總是相等的)
樹的高度(tree height):root結點的高度。(
樹的深度和他的高度總是相等的)
樹的層次(tree level):以root結點為第1層,root的孩子為第2層,以此類推。
父結點(parent):下圖中,a是 b和c共同的父節點。
除了root結點外,乙個結點僅有乙個父結點。root結點無父結點。
孩子結點(child):乙個結點的 直接子結點,叫做這個結點的孩子結點。下圖中,a的孩子為b,c。
兄弟結點(sibling):擁有同乙個parent的結點之間稱為兄弟。
祖先(ancestor):一般指真祖先,即不包括結點本身。乙個結點的父結點,父結點的父結點...一直向上到root結點,都是他的祖先。下圖,e的祖先是b和a。
子孫(descendant):一般指真子孫,即不包括結點本身。以某結點為root結點的所有結點都是這個結點的子孫。下圖b的子孫是d,e。
定義:0個或者多個不相交的樹形成森林。
無迴路且不一定連通的 圖叫做森林,其中每乙個連通分量為乙個樹。
如果樹非空,則 結點數 總比 邊數 多 1: n = e + 1
證明:除了root結點外,其餘的結點都由 一條邊引出來的(具體到圖中,每個圓圈頭上都有「一根草」),而root結點則沒有,這就是少一的原因。
一般樹(generic tree):樹中每個結點的孩子數目是不確定的,0個或多個。二叉樹是generic tree的特例。
自由樹(free tree):即無環連通圖,這種樹我們傾向於用圖的眼光去看待它,因為他沒有指定那乙個結點是root,他的任何結點都可以是root。
有根樹(rooted tree):明確指定了root結點的樹,樹的形態非常明顯。一般我們談論的樹就是指有根樹。
按照子結點是否有序分:
有序樹:樹中的每乙個結點的所有孩子結點在邏輯上都是在意順序的,是有序的:第乙個孩子,第二個孩子,第三個孩子...第n個孩子。
無序數:樹中的每乙個結點的孩子結點不在意他們的放置順序,是無序的。
按照形態分 :
樹 --
二叉樹--
滿二叉樹
完全二叉樹
完美二叉樹
...三叉樹
四叉樹五叉樹
...
樹都可以看做是 連通 無環 無向圖,如果特別說明,也可以是有向圖。如果將乙個樹看做是無向圖,則可以任取乙個結點為root,將得到不同意義的樹。
一般樹(generic tree),特點是每個結點的度是不確定的。
這裡介紹2種儲存實現。
1、左孩子右兄弟表示法:將一般樹轉化為二叉樹來儲存,在乙個一般樹gt對應的二叉樹bt中,每乙個結點的左孩子對應gt中的這個結點的第乙個孩子,而每乙個結點的右孩子對應gt中這個結點的下乙個相鄰的兄弟。
摘自維基百科:如下左邊是乙個一般樹,右邊是它對應的二叉樹。
class generictreenode2、孩子鍊錶表示法結點的域有3個:element儲存資料,parent儲存這個結點的父結點的引用,children是乙個儲存他的所有孩子的引用的線性表。
如果不需要訪問父結點,則可以去掉parent域。
樹的基本概念
樹的遞迴定義如下 單個結點是一棵樹,樹根就是該結點本身。設t1,t2,tk是樹,它們的根結點分別為n1,n2,nk。用乙個新結點n作為n1,n2,nk的父親,則得到一棵新樹,結點n就是新樹的根。我們稱n1,n2,nk為一組兄弟結點,它們都是結點n的子結點。我們還稱t1,t2,tk為結點n的子樹。空集...
樹的基本概念
邏輯非線性結構 資料和資料之間是1 m 若某個節點有後繼,則後繼節點可以是多個 若某個節點有前驅,則前驅節點只能是乙個 可以把節點分成前驅節點和後繼節點 節點的度 若a節點有m個子節點,則節點a的度是m 樹的度 樹中節點最大的度 度為n,高度為h的樹中,最多有多少個節點?1 n n 2 n 3 n ...
樹的基本概念
樹是n n 0 個結點的有限集。n 0時稱為空樹。在任意一課非空樹中 1 有且僅有乙個特定的稱為根的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1 t2 tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹。注意點樹的結點包含乙個資料元素及若干指向其子樹的分支。結點擁有的子樹...