二叉樹的三種遍歷

2021-10-21 04:15:16 字數 3011 閱讀 2916

閱讀本文前應對樹的結構有所了解,起碼得知道根節點,左子樹和右子樹。其次就是,本文採用的對二叉樹進行遍歷時用的是遞迴的方法。

遍歷:沿著特定的路徑,對每乙個節點只進行一次訪問。然後因對根節點的訪問順序的不同,分為前、中、後三種遍歷方式

以下的遍歷結果基於上圖

一、前序遍歷

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 或者是有乙個根節點及兩顆不相交的且分別稱為左 右子樹的二叉樹所組成。可見,二叉樹同樣具有遞迴性質。特別需要注意的是,儘管樹和二叉樹的概念之間有許多聯絡,但它們是兩個不同的概念,樹和二叉樹之間最主要的區別是 二叉樹結點的子樹要區分左子樹和右子...