閱讀本文前應對樹的結構有所了解,起碼得知道根節點,左子樹和右子樹。其次就是,本文採用的對二叉樹進行遍歷時用的是遞迴的方法。
遍歷:沿著特定的路徑,對每乙個節點只進行一次訪問。然後因對根節點的訪問順序的不同,分為前、中、後三種遍歷方式
以下的遍歷結果基於上圖
一、前序遍歷
1.遍歷順序:根節點——>左子樹——>右子樹
在這裡需要注意的是,當訪問了根節點之後,後面對左右子樹進行訪問的時候,仍需要遵循先訪問子樹中的根節點,並且是左子樹全都訪問完之後才對右子樹進行訪問。
2.遍歷結果:gdafe mhz(給根節點加粗顯示)
二、中序遍歷
1.遍歷順序:左子樹——>根節點——>右子樹
其實中序遍歷就是從樹的最後一層,最左邊的那個節點開始,遵循從左到右的順序對節點進行訪問,即最左下角的節點訪問之後再對它的父節點進行訪問,若當前父節點有右子樹,則對它進行訪問,否則再對當前父節點的父節點進行訪問,也就是遞迴。便於理解,對樹進行擴充
在這棵樹中,左下角無節點,則從a出發,再訪問b,然後遞迴,訪問a的父節點d,此時d的左子樹已全部完成訪問,接下來就是對d的右子樹進行訪問,還是從最後一層開始,ef,此時根節點g的左子樹已全部完成訪問,便輪到g,之後用同樣的方法對g的右子樹進行訪問
其實中序的訪問順序也就是從最後一層開始:左下——>正上——>右下(左下和右下在同一層),完成之後再從正上的這個節點迴圈
2.遍歷結果:abdefg. chmz
三、後序遍歷
1.遍歷順序:左子樹——>右子樹——>根節點
仿照中序遍歷的思路,那後序遍歷就是,從最後一層的左邊開始:左下——>右下——>正上(左下和右下在同一層),遍歷結果仍使用中序遍歷的圖
2.遍歷結果:baefd chzmg
說白了,前、中、後遍歷是因為二叉樹的根節點在整個遍歷結果中處於前、中、後的位置,且在對子樹進行遍歷的時候,也要考慮子樹根節點的遍歷順序
四、**實現
下面用**實現前、中、後三種遍歷
思路:1.建立節點類,用於儲存資料,並在其中寫遍歷方法,在裡面用遞迴
2.建立二叉樹類,再寫遍歷方法
public
class
binarytreeergodic
}//節點類
class
treenode
public
void
setleft
(treenode left)
public
void
setright
(treenode right)
//需要把該類轉換成字串的時候就會自動呼叫這個方法,則在輸出語句中輸出物件,該物件就會返回tostring方法中過的字串
public string tostring()
//前序遍歷
public
void
preorder()
if(this
.right != null)
}//中序遍歷
public
void
infixorder()
ssytem.out.
println
(this);
if(this
.right != null)
}//後序遍歷
public
void
postorder()
if(this
.right != null)
system.out.
println
(this);
}}//二叉樹類
class
binarytree
//前序遍歷
public
void
preorder()
else
}//中序遍歷
public
void
infixorder()
else
}//後序遍歷
public
void
postorder()
else
}}
程式執行結果如下;------前序遍歷-------
treenode [number=1, name=a]
treenode [number=2, name=b]
treenode [number=3, name=c]
treenode [number=4, name=d]
treenode [number=5, name=e]
treenode [number=6, name=f]
-----中序遍歷-------
treenode [number=2, name=b]
treenode [number=3, name=c]
treenode [number=1, name=a]
treenode [number=5, name=e]
treenode [number=4, name=d]
treenode [number=6, name=f]
------後序遍歷—-----
treenode [number=3, name=c]
treenode [number=2, name=b]
treenode [number=5, name=e]
treenode [number=6, name=f]
treenode [number=4, name=d]
treenode [number=1, name=a]
二叉樹的三種遍歷
重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...
二叉樹的三種遍歷
在這裡說一下二叉樹的三種遍歷 前序,中序,後序 正文 前序遍歷 是指先從根開始,再依次找尋左子結點 右子結點。學習時的經驗就是 看圖學習 第乙份圖 這樣看來 1.先找最基本的根結點 詞窮 這裡是a。2.接著找以a為根結點的左子結點,這裡是b。3.而以b為根結點也會出現左右結點,這就又有了乙個左結點d...
二叉樹的三種遍歷
二叉樹是n n 0 個節點的有限集合,它或者是空樹 n 0 或者是有乙個根節點及兩顆不相交的且分別稱為左 右子樹的二叉樹所組成。可見,二叉樹同樣具有遞迴性質。特別需要注意的是,儘管樹和二叉樹的概念之間有許多聯絡,但它們是兩個不同的概念,樹和二叉樹之間最主要的區別是 二叉樹結點的子樹要區分左子樹和右子...