二叉樹(Binary tree)--演算法學習之路(一)
二叉樹是資料結構中一種重要的資料結構,也是樹表家族最為基礎的結構。
二叉樹的定義:二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2i-1個結點;深度為k的二叉樹至多有2k-1個結點;對任何一棵二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。
滿二叉樹和完全二叉樹:
滿二叉樹:除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點。也可以這樣理解,除葉子結點外的所有結點均 有兩個子結點。節點數達到最大值,所有葉子結點必須在同一層上。
滿二叉樹的性質:
1) 一顆樹深度為h,最大層數為k,深度與最大層數相同,k=h;
2) 葉子數為2h;
3) 第k層的結點數是:2k-1;
4) 總結點數是:2k-1,且總節點數一定是奇數。
完全二叉樹:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~(h-1)層) 的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹。
注:完全二叉樹是效率很高的資料結構,堆是一種完全二叉樹或者近似完全二叉樹,所以效率極高,像十分常用的排序演算法、Dijkstra演算法、Prim演算法等都要用堆才能優化,二叉排序樹的效率也要藉助平衡性來提高,而平衡性基於完全二叉樹。
二叉樹的性質:
1) 在非空二叉樹中,第i層的結點總數不超過2i-1, i>=1;
2) 深度為h的二叉樹最多有2h-1個結點(h>=1),最少有h個結點;
3) 對於任意一棵二叉樹,如果其葉結點數為N0,而度數為2的結點總數為N2,則N0=N2+1;
4) 具有n個結點的完全二叉樹的深度為log2(n+1);
5)有N個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:
若I為結點編號則 如果I>1,則其父結點的編號為I/2;
如果2I<=N,則其左兒子(即左子樹的根結點)的編號為2I;若2I>N,則無左兒子;
如果2I+1<=N,則其右兒子的結點編號為2I+1;若2I+1>N,則無右兒子。
6)給定N個節點,能構成h(N)種不同的二叉樹,其中h(N)為卡特蘭數的第N項,h(n)=C(2*n, n)/(n+1)。
7)設有i個枝點,I為所有枝點的道路長度總和,J為葉的道路長度總和J=I+2i。
各位 小編今天第一次寫部落格 可能我理解的 知識 在某些地方相同,希望大家不要介意。因為都是在學習,都是在總結。希望大家諒解。謝謝各位。