二叉樹算法的數據結構:java
二叉樹結點Node實現與c中的區別是,c中採用的是結構體,而java中是用類來實現,而在c++的教材中,類是一種自定義數據結構。c++
二叉樹的leftchild和rightchild在c中是利用指針,而java中則直接使用類名,類名在java中是一種引用。算法
二叉樹算法原理:數據結構
遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按必定的規則和順序走遍二叉樹的全部結點,使每個結點都被訪問一次,並且只被訪問一次。因爲二叉樹是非線性結構,所以,樹的遍歷實質上是將二叉樹的各個結點轉換成爲一個線性序列來表示。 spa
設L、D、R分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種狀況:指針
DLR(稱爲先根次序遍歷),LDR(稱爲中根次序遍歷),LRD (稱爲後根次序遍歷)。 遞歸
1.中序遍歷的遞歸算法定義:it
若二叉樹非空,則依次執行以下操做:原理
(1)遍歷左子樹;二叉樹
(2)訪問根結點;
(3)遍歷右子樹。
2.先序遍歷的遞歸算法定義:
若二叉樹非空,則依次執行以下操做:
(1) 訪問根結點;
(2) 遍歷左子樹;
(3) 遍歷右子樹。
3.後序遍歷得遞歸算法定義:
若二叉樹非空,則依次執行以下操做:
(1)遍歷左子樹;
(2)遍歷右子樹;
(3)訪問根結點。
4.中序遍歷的算法實現
用二叉鏈表作爲存儲結構,中序遍歷算法可描述爲:
void InOrder(BinTree T)
{ //算法裏①~⑥是爲了說明執行過程加入的標號
① if(T) { // 若是二叉樹非空
② InOrder(T->lchild);
③ printf("%c",T->data); // 訪問結點
④ InOrder(T->rchild);
⑤ }
⑥ } // InOrder