樹的基本概念

2021-09-06 08:52:14 字數 1531 閱讀 7738

無論是鍊錶,棧還是佇列,它們都是線性結構的,每個節點的左邊最多乙個節點,右邊也最多乙個節點,對於大量的輸入資料,線性表的訪問時間太慢,不宜使用。這裡我要說一種非線性的資料結構,其大部分操作的執行時間平均為o(logn)。

我們涉及到的這種資料結構叫做樹。在電腦科學中,樹是非常有用的抽象概念。我們形象的去描述一棵樹,乙個家族的老祖可能有兩個兒子,這兩個兒子乙個有乙個兒子,乙個有三個兒子,像這樣發展下去的乙個族譜,就是乙個樹,如圖1所示。

就像一棵真正的樹一樣,我們把老祖稱為樹根,兩個字兒是分叉開的兩個樹枝,這兩棵樹枝可以繼續向下分成n個樹枝,迴圈下去,一直到長出葉子為止。

我們把老祖或者樹根稱為根(root)節點,老祖的兒子稱為子節點,每個兒子作為根節點又可以形成一棵樹,我們把這樣的樹稱為根節點的子樹。

樹的標準定義:

樹(tree)是包含n(n>0)個節點的有窮集合,其中:

(1)每個元素稱為節點(node);

(2)有乙個特定的節點被稱為根節點或樹根(root)。

(3)除根節點之外的其餘資料元素被分為m(m≥0)個互不相交的結合t1,t2,……tm-1,其中每乙個集合ti(1<=i<=m)本身也是一棵樹,被稱作原樹的子樹(subtree)。

樹具有以下特點:

(1)    每個節點有零個或多個子節點。

(2)    每個子節點只有乙個父節點。

(3)    沒有父節點的節點稱為根節點。

關於樹的一些術語

節點的度:乙個節點含有的子樹的個數稱為該節點的度;

葉節點或終端節點:度為零的節點稱為葉節點;

非終端節點或分支節點:度不為零的節點;

雙親節點或父節點:若乙個結點含有子節點,則這個節點稱為其子節點的父節點;

孩子節點或子節點:乙個節點含有的子樹的根節點稱為該節點的子節點;

兄弟節點:具有相同父節點的節點互稱為兄弟節點;

樹的高度或深度:定義一棵樹的根結點層次為1,其他節點的層次是其父結點層次加1。一棵樹中所有結點的層次的最大值稱為這棵樹的深度。節點的層次:從根開始定義起,根為第1層,根的子結點為第2層,以此類推;

樹的度:一棵樹中,最大的節點的度稱為樹的度;

節點的祖先:從根到該節點所經分支上的所有節點;

子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。

森林:由m(m>=0)棵互不相交的樹的集合稱為森林;

樹的實現

節點的**如下:

struct treenode

除了攜帶資料的部分外,每個節點都有乙個子節點鍊錶。子節點鍊錶為空的節點屬於葉子節點。樹的應用大部分作業系統的目錄結構就是採用樹結構。

樹的種類有很多,樹所擴充套件出來的很多資料結構都有著很大的作用,比如說紅黑樹,b樹,字尾樹等等

樹的基本概念

樹的遞迴定義如下 單個結點是一棵樹,樹根就是該結點本身。設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,其中每乙個集合本身又是一棵樹,並且稱為根的子樹。注意點樹的結點包含乙個資料元素及若干指向其子樹的分支。結點擁有的子樹...