樹的基本知識

2021-07-25 09:34:00 字數 1847 閱讀 6071

:樹是一些節點的集合。這個集合可以是空集;若集合不是空集,則樹由根節點r以及0個或多個子樹組成。

:兩個節點之間的連線就是邊。

樹葉:沒有兒子的節點稱為樹葉。 

節點的度:節點擁有的子樹數稱為節點的度。

:節點的度的最大值稱為樹的度。

兄弟:具有相同父親節點的節點稱為兄弟。

路徑:從節點n1到節點nk的路徑定義為n1,n2,…,nk的乙個序列,但是ni必須是n(i+1)的父節點。這也要求了路徑必須從根節點往下遍歷,而不能逆向而上。而且對於任意節點,有且只有一條路徑。

路徑的長:某條路徑上的邊的個數就是路徑的長。

深度:ni的深度表示從根節點到ni的路徑的長。根的深度為0。

高度:ni的高度為從ni到其樹葉的最大的深度。因此,所有樹葉的高度都是0。一棵樹的高等於它根的高,一棵樹的深度等於它最深的葉子節點的深度。

對於一般的樹來說,只有先序遍歷與後序遍歷,木有中序遍歷——因為子樹的個數不確定,無法決定訪問根節點的時機。

1,先訪問根節點。

2,依次先序遍歷根節點的每棵子樹。

這也是乙個遞迴定義。

1,先依次後序遍歷每棵子樹。

2,再訪問根節點。

1,有n個節點的樹必然有n-1條邊。 因為除根節點以外,每乙個節點都有一條邊通向它。

2,每乙個節點有k個指向子樹的域以及乙個值域,那麼在一棵有n個節點且度為k的樹中,必有n(k-1)+1個空域。證明:空域的個數為k*n0+(k-1)*n1+...+n[k-1]。而n = n0+n1+...+nk,同時邊數為n-1,邊數也為k*n0+(k-1)*n1+...+n[k-1],三式結合即可得證。

1,二叉樹的第i層上最多有2的(i-1)次方個節點,注:i大於等於1——根節點為第一層。

2,深度為k的二叉樹最多有2^k-1個節點。注:此處根的深度為1。

3,記葉子節點的個數為n0,度為2的節點個數為n2,則n0=n2+1。證明過程如下:

設n1表示度為1的節點數,則總節點數n=n1+n0+n2——式1。同理,也可知總邊數為n-1=n1+2*n2——式2。則式2帶入式1中就可證明性質3。

4,含有n個節點的二叉鍊錶必含有n+1個空域(二叉鍊錶——樹的每乙個節點都有三個域:值域,左子樹域和右子樹域,左右子樹域用來指向左右子樹根節點)。證明:空域的個數為2*n0+n1。而n = n0+n1+n2,同時n2=n0-1,所以2*n0+n1-1=n,性質得證。

對任意一棵樹,常用的表示方法為孩子兄弟法——以二叉鍊錶做樹的儲存結構,左鏈域指向第乙個孩子節點,右鏈域指向下乙個兄弟節點。該表示法又稱二叉鍊錶表示法或二叉樹表示法。如(**於維基百科)

以二叉鍊錶表示一棵樹,可以將任意一棵樹轉換為二叉樹,而且該二叉樹的根節點無右子樹(因為原樹的根結點沒有兄弟節點)。利用這個性質,可以將乙個森林轉換成二叉樹。

將森林中第二棵樹的根節點看成第一棵樹根結點的兄弟結點,則可以將森林轉為二叉樹。

1,先將各樹轉為二叉樹。

2,將第i+1棵樹的作為第i棵樹的右子樹。

或者:1,第一棵樹的根節點root為整個二叉樹的根節點。

2,root的左子樹為第一棵樹的root的子樹組成的二叉樹。

3,root右子樹為森林中除第一棵樹之外的樹組成的二叉樹。

很明顯第二種方法是一種遞迴方法,使用遞迴很容易寫出相應的**。

樹 基本知識

自由樹 自由樹是乙個連通,無迴路的無向圖.顯然樹是圖的一種.如果乙個無向圖雖然無迴路,但是可能非聯通,那麼這個圖成為森林.森林可以調整為一顆二叉樹 左兒子,右兄弟 森林是m m 0 棵互不相交的樹的集合。令g v,e 為乙個無向圖.則以下6點是等價的.1 g是自由樹 2 g中任意兩個頂點由唯一一條簡...

樹的基本知識

表示法 1.樹形 2.文氏圖 3.凹入 4.括號 結點的度與樹的度 m次樹 結點子樹的個數 非終端節點,分支結點,葉節點 路徑與路徑長度 ki,ki1,ki2,kj,結點數目減1 分支數目 孩子結點,雙親結點,兄弟結點 結點的層次和樹的高度 根節點為第一層,樹的高度。森林 n n 0 個互不相交的樹...

樹的基本知識

樹是由乙個或多個結點組成的有限集合 t 其中 1 乙個特定的結點稱為該樹的根 root 結點 2 結點之外的其餘結點可分為 m m 0 個互不相交的有限集合 t 1 t 2 t m 且其中每乙個集合本身又是一棵樹,稱之為根的子樹 subtree 1 結點的度 degree 樹中的乙個結點擁有的子樹數...