二叉樹的前中後遍歷及層序遍歷

2021-10-08 18:24:20 字數 3313 閱讀 1399

概念

二叉樹的遍歷是指從根結點出發,按照某種次序依次訪問二叉樹中的所有結點,使得每個結點被訪問一次且僅被訪問一次。

樹遍歷的本質是將非線性結構線性化

深度優先遍歷

二叉樹的深度優先遍歷,分為如下三種:(先左後右)

廣度優先遍歷

與深度優先遍歷不同的是,廣度優先遍歷是先搜尋所有兄弟和堂兄弟結點再搜尋子孫結點。而深度優先遍歷則是先搜尋乙個結點的所有子孫結點,再去搜尋這個結點的兄弟結點。廣度優先遍歷,不需要使用遞迴,借助佇列來實現。

先輸出當前結點的資料,再依次遍歷輸出左結點和右結點

前序遍歷的遞迴實現

public

static

void

front

(treenode root)

system.out.

println

(root.val)

;front

(root.left)

;front

(root.right)

;}

前序遍歷的非遞迴實現
public

static

void

frontfeidigui

(treenode root)

stack

stack =

newstack

<

>()

;while

(root!=null||

!stack.

isempty()

) root = stack.

pop(

).right;

}}

先遍歷輸出左結點,再輸出當前結點的資料,再遍歷輸出右結點

中序遍歷的遞迴實現

public

static

void

middledigui

(treenode root)

frontdigui

(root.left)

; system.out.

println

(root.val)

;frontdigui

(root.right)

;}

中序遍歷的非遞迴實現
public

static

void

middlefeidigui

(treenode root)

stack

stack =

newstack

<

>()

;while

(root!=null||

!stack.

isempty()

) root = stack.

pop();

system.out.

println

(root.val)

; root = root.right;

}}

先遍歷輸出左結點,再遍歷輸出右結點,最後輸出當前結點的資料

後續遍歷的遞迴實現

public

static

void

behinddigui

(treenode root)

frontdigui

(root.left)

;frontdigui

(root.right)

; system.out.

println

(root.val)

;}

後序遍歷的非遞迴實現
/*後序遍歷時,分別從左子樹和右子樹共兩次返回根結點(用tag表示次數),

* 只有從右子樹返回時才訪問根結點,所以增加乙個棧標記到達結點的次序。

*/public

static

void

behindfeidigui

(treenode root)

stack

stack =

newstack

<

>()

; stack

tag =

newstack

<

>()

;while

(root!=null||

!stack.

isempty()

)if(tag.

peek()

==1)else

}}

從樹的第一層,也就是根結點開始訪問,從上而下逐層遍歷,在同一層中按從左到右的順序對結點逐個訪問層序遍歷的實現(用佇列資料結構)

public

static

void

sequence

(treenode root)

linkedlist

list =

newlinkedlist

<

>()

; list.

add(root)

;while

(!list.

isempty()

)if(root.right!=null)

}}

比如你知道乙個程式的先序遍歷是abcdefg 中序遍歷是cbdaegf讓你推算出後序遍歷,因為先序遍歷的順序是根-左-右 那麼我們看先序遍歷abcdefg,那麼a就是根結點,再看中序遍歷cbdaegf,根據中序遍歷的左-根-右看出a左邊cbd的都是左子樹,右邊的egf是左子樹,然後對先序遍歷劃分 a/bcd/efg,對左子樹cbd 由先序遍歷中的a/bcd/efg可以看出bcd中b在前面 則b是左子樹的根 c是下一行的左子樹,同理可對efg分析,畫出圖如下:

a

/ \b e

/\ \

c d f/g

那麼後序遍歷cdbgfea

完結撒花(^_^) ~~~~~~~~~

二叉樹的遍歷(前,中,後,層序)

二叉樹的遍歷是指從根節點出發,按照某種次序依次訪問二叉樹中所有節點,使得每個節點僅被訪問一次 前序遍歷 若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。結果是 abdghceif 中序遍歷 若樹為空,則空操作返回,否則從根節點開始 注意並不是先訪問根節點 中序遍歷...

二叉樹的前中後層遍歷

package com.data.tree public class bitree package com.data.tree classname treetest description todo author payphone date 2018年12月24日 下午1 44 07 version...

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...