樹:樹是一些節點的集合。這個集合可以是空集;若集合不是空集,則樹由根節點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 樹中的乙個結點擁有的子樹數...