【樹的定義】
樹(Tree):n(n≥0)個結點構成的有限集合。當n=0時,稱為“空樹”;對於任一棵“非空樹”(n>0),它具備以下性質:
- 樹中有一個稱為“根(Root)”的特殊結點,用r表示;
- 其余結點可分為m(m≥0)個“互不相交”的有限集T1,T2,...,Tm,其中每一個集合本身又是一棵樹,稱為原來樹的“子樹(SubTree)”。
特點:
- 子樹是不相交的;
- 除了根結點外,每個結點有且僅有一個父節點;
- 一棵N個結點的樹有N-1條邊。
【一些基本術語】
- 結點的度(Degree):結點的子樹個數;
- 樹的度:樹的所有結點中最大的度數;
- 葉結點(Leaf):度為0的結點;
- 父結點(Parent):有子樹的結點是其子樹的根節點的父結點;
- 子結點/孩子結點(Child):若A結點是B結點的父結點,則稱B結點是A結點的子結點;
- 兄弟結點(Sibling):具有同一個父結點的各結點彼此是兄弟結點;
- 路徑和路徑長度:從結點n1到nk的路徑為一個結點序列n1,n2,...,nk。ni是ni+1的父結點。路徑所包含邊的個數為路徑的長度;
- 祖先結點(Ancestor):沿樹根到某一結點路徑上的所有結點都是這個結點的祖先結點;
- 子孫結點(Descendant):某一結點的子樹中的所有結點是這個結點的子孫;
- 結點的層次(Level):規定根結點在1層,其他任一結點的層數是其父結點的層數加1;
- 樹的深度(Depth):樹中所有結點中的最大層次是這棵樹的深度;
【二叉樹(Binary Tree)的定義】
二叉樹T:一個有窮的結點集合。這個集合可以為空;若不為空,則它是由根結點和稱為其左子樹TL和右子樹TR的兩個不相交的二叉樹組成。二叉樹的子樹有左右順序之分。
二叉樹的五種基本形態:
【特殊的二叉樹】
- 斜二叉樹(Skewed Binary Tree)
- 滿二叉樹(Full Binary Tree)/ 完美二叉樹(Perfect Binary Tree):除最后一層無任何子結點外,每一層上的所有結點都有兩個子結點的二叉樹。
- 完全二叉樹(Complete Binary Tree):有n個結點的二叉樹,對樹中結點從上至下、從左到右順序進行編號,編號為i(1≤i≤n)結點與滿二叉樹中編號為i結點在二叉樹中的位置相同。
完全二叉樹的順序存儲結構中,按從上至下、從左到右順序存儲n個結點的完全二叉樹的結點父子關系:
- 根結點的序號為1;
- 非根結點(序號i>1)的父結點的序號是:i / 2;
- 結點(序號為i)的左孩子結點的序號是:2 * i,若2*i > n,則沒有左孩子;
- 結點(序號為i)的右孩子結點的序號是:2 * i + 1,若2*i+1 > n,則沒有右孩子;
【二叉樹的幾個性質】
- 一個二叉樹第i層的最大結點數為:2i-1,i≥1;
- 深度為k的二叉樹有最大結點總數為:2k-1,k≥1;
- 對任何非空二叉樹T,若n0表示葉結點的個數,n2是度為2的非葉結點個數,那么兩者滿足關系:n0=n2+1;
假設:葉結點個數為n0;度為1的結點個數為n1;度為2的結點個數為n2。
則二叉樹的總邊數N=2*n2+n1;總結點數N′=n0+n1+n2;
因N+1=N′,所以2*n2+n1+1=n0+n1+n2;得n0=n2+1。