結點的深度是從根結點開始自頂向下逐層累加的。
結點的高度是從葉節點開始自底向上逐層累加的。
樹的高度(又稱深度)是樹中結點的最大層數。
樹的一些重要性質:
1· 樹中結點數等於所有結點的度數加1
2 爲m的樹中第i層至多有個結點
3 高度爲h的m叉樹至多有(-1)/(m-1)個結點
4 具有n個結點的m叉樹的最小高度爲logM(n(m-1))+1
二叉樹與度爲2的有序樹的區別:
1 度爲2的樹至少有3個結點,而二叉樹可以爲空
2度爲2的樹有序樹的孩子結點的左右次序是相對於另一孩子而言,而二叉樹是確定的
幾個特殊的二叉樹
1 滿二叉樹:高度爲h,含有-1個結點的二叉樹
2 完全二叉樹:高度爲h,有n個結點的二叉樹,每一個結點序號與滿二叉樹一一對應時,稱之爲完全二叉樹(不一定滿)
特點:
1 葉子結點只可能在層次最大的兩層出現。對於最大層次中的葉子結點,都依次排列在該層的最左邊位置上
2 如果有度爲1的結點,只可能有一個,且該結點只有左孩子而無右孩子(重要特徵)
3按層序排序後,一旦出現某結點(其編號爲i)爲葉子結點或只有左孩子,則編號大於i的結點均爲葉子結點
4如n爲奇數,則每個分支都有左右子女;如n爲偶數,則編號最大的分支結點只有左子女
3二叉排序樹:左子樹上所有結點的關鍵字均小於根節點關鍵字,右子樹所有關鍵字均大於根節點關鍵字
4平衡二叉樹:樹上任一結點的左子樹和右子樹的深度之差不超過1
二叉樹的性質:(非常重要)
非空二叉樹的葉子結點度數等於度爲2的結點數加1,N0=N2+1
鏈式存儲結構描述:
typedef struct btnode{
elemtype data;
struct btnode *lchild,*rchild;
}btnode,*btree;
含有n個結點的二叉鏈表中含有n+1個空鏈域
樹和二叉樹的轉換規則:
每個結點左指針指向它的第一個孩子結點,右指針指向它在樹中的相鄰兄弟結點,可表示爲“左孩子右兄弟”
由於根節點沒有兄弟,所以由樹轉換而得的二叉樹沒有右子樹