一、二叉樹的定義
折半查找引出。
1、二叉樹的特點
1)每個結點最多有兩棵子樹
2)左子樹和右子樹是有順序的,不能顛倒次序
3)即使樹中只有一棵子樹,也要區分是左子樹 還是右子樹
二叉樹有5種形態:
空二叉樹、只有一個根結點、根結點只有左子樹、根結點只有右子樹、根結點有左子樹和右子樹
2、特殊二叉樹
1)斜樹:
所有結點都只有左子樹——左斜樹
所有結點都只有右子樹——右斜樹
2)滿二叉樹
所有分支都存在左子樹和右子樹,所有葉子都存在同一層上。
葉子只能出現在最下面一層,達到平衡。
非葉子的度一定爲2.
同樣深度的二叉樹,滿二叉樹的結點最多,葉子最多。
3)完全二叉樹
具有n個結點的二叉樹,按層編號,若編號i的結點與同樣深度的的滿二叉樹中編號爲i的結點在二叉樹中位置完全相同,則這棵二叉樹稱爲完全二叉樹。
特點:
葉子結點只會出現在最下兩層;
最下層的葉子結點集中在左部連續區域;
倒數第二層有葉子結點,集中在右部連續區域;
若結點度爲1,則只有左孩子;
同樣結點的二叉樹,完全二叉樹的深度最小?!
二、二叉樹的性質
1、第 i 層上至多有2^(i-1)個結點。(i>=1)
2、深度爲 k 的二叉樹至多有 2^k - 1個結點(k>=1)
3、若(度爲0)終端結點數爲n0,度爲2的結點數爲n2,則n0=n2+1
4、具有n個結點的完全二叉樹的深度爲[log2n]+1(不大於log2n的最大整數,向下取整的意思)
5、對一棵有n個結點的完全二叉樹(深度爲[log2n]+1),按層編號,每層從左往右,對任意結點 i :
若i=1,結點i爲二叉樹的跟;若i>1,其雙親爲 [ i/2 ](取整)
若2i>n,則結點i無左孩子,否則左孩子爲2i
若2i+1>n,則結點無右孩子,否則右孩子爲 2i+1
三、二叉樹的存儲結構
1、順序存儲
用一維數組存儲二叉樹中的結點,數組的下標表示結點標號。
順序存儲一般只適用於完全二叉樹。
2、鏈式存儲
每個結點最多有2個孩子,所以爲他設計一個數據域和兩個指針域。——二叉鏈表
lchild | data | rchild
(若增加雙親指針,則爲三叉鏈表)