樹的相關術語:
結點的度:一個結點的子樹的數量。
樹的度:該樹中結點的最大度數。
葉結點和分支結點:度為0的結點和度不為0的結點。
樹的深度:樹中結點的最大層數。
有序樹和無序樹:樹中每個結點的各子樹看成是從左到右有次序的稱為有序樹(一般都是),反之無序
森林:m(m>0)棵互不相交的樹的集合。
樹的表示:(A(B(E,F(I,J)),C,D(G,H)))
二叉樹的常見問題及其解決程序 http://www.linuxidc.com/Linux/2013-04/83661.htm
【遞歸】二叉樹的先序建立及遍歷 http://www.linuxidc.com/Linux/2012-12/75608.htm
在JAVA中實現的二叉樹結構 http://www.linuxidc.com/Linux/2008-12/17690.htm
【非遞歸】二叉樹的建立及遍歷 http://www.linuxidc.com/Linux/2012-12/75607.htm
二叉樹遞歸實現與二重指針 http://www.linuxidc.com/Linux/2013-07/87373.htm
二叉樹先序中序非遞歸算法 http://www.linuxidc.com/Linux/2014-06/102935.htm
輕松搞定面試中的二叉樹題目 http://www.linuxidc.com/linux/2014-07/104857.htm
二叉樹的概念:
1. 五種基本形態:空,僅有根結點,僅有左子樹,僅有右子樹,有左右子樹.
2. 與樹的區別:最大度為2;結點有左右之分。
3. 滿二叉樹:除最下一層結點外,每層都有2個子結點。
完全二叉樹:除最後一層外,其他各層的結點數都達到最大個數;且最後一層從左往右結點連續。
4. 性質:
(1)在二叉樹的第i層上至多有2^(i-1)個結點。
(2)深度為k的二叉樹至多有2^k-1個結點(k≥1),最少有k個結點。
(3)對任何一顆二叉樹,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。
(4)具有n個節點的完全二叉樹的深度為[log2n]+1,其中[log2n]+1是向下取整。
(5)如果有一顆有n個節點的完全二叉樹的節點按層次序編號,對任一層的節點i(1<=i<=n)有
1.如果i=1,則節點是二叉樹的根,無雙親,如果i>1,則其雙親節點為[i/2],向下取整
2.如果2i>n那麼節點i沒有左孩子,否則其左孩子為2i
3.如果2i+1>n那麼節點沒有右孩子,否則右孩子為2i+1
5. 二叉樹的儲存:
(1)順序儲存結構:一般按從上至下和從左到右的順序將樹中的結點順序存儲在一維數組中。
一般用於儲存完全二叉樹,若不是完全二叉樹可以將其轉化為完全二叉樹(虛設結點#)。但會造成空間的大量浪費。
#define Maxsize 100 //假設一維數組最多存放100個元素
typedef char Datatype; //假設二叉樹元素的數據類型為字符
typedef struct
{ Datatype bt[Maxsize];
int btnum;
}Btseq;
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-09/106452p2.htm