二叉樹遍歷演算法和原始碼

2021-07-02 13:53:16 字數 2023 閱讀 6541

1.二叉樹幾種遍歷方法

1.先(根)序遍歷的

遞迴演算法

定義:

若二叉樹非空,則依次執行如下操作: ⑴

訪問根結點; ⑵

遍歷左子樹; ⑶

遍歷右子樹。 2

.中(根)序遍歷的遞迴演算法定義:

若二叉樹非空,則依次執行如下操作: ⑴

遍歷左子樹; ⑵

訪問根結點; ⑶

遍歷右子樹。 3

.後(根)序遍歷得遞迴演算法定義:

若二叉樹非空,則依次執行如下操作: ⑴

遍歷左子樹; ⑵

遍歷右子樹; ⑶

訪問根結點。

中序投影法

計算中序遍歷擁有比較簡單直觀的投影法,如圖

中序遍歷的投影法

層序遍歷

除了先序遍歷、中序遍歷、後序遍歷外,還可以對二叉樹進行層序遍歷。設二叉樹的根節點所在層數為

1,層序遍歷就是從所在二叉樹的根節點出發,首先訪問第一層的樹根節點,然後從左到右訪問第

2層上的節點,接著是第三層的節點,以此類推,自上而下,自左至右逐層訪問樹的結點的過程就是層序遍歷。

【例】上圖所示的二叉樹中結點

c,其前序前驅結點是

d,前序後繼結點是

e;中序前驅結點是

e,中序後繼結點是

f;後序前驅結點是

f,後序後繼結點是

a。但是就該樹的邏輯結構而言,

c的前驅結點是

a,後繼結點是e和

f。

2.二叉鍊錶基本思想

基於先序遍歷的構造,即以二叉樹的先序序列為輸入構造。

注意:先序序列中必須加入虛結點以示空指標的位置。 3.

二叉樹c#

遍歷演算法原始碼

c# code:

//////二叉樹結點

///public

class treenode

//////

左子樹///

public treenode left

//////

右子樹///

public treenode right

}public

class test

//////

先序遍歷

//////

///public

static

void firstroot( treenode node )

//////

中序遍歷

//////

///public

static

void middleroot( treenode node )

//////

後序遍歷

//////

///public

static

void laterroot( treenode node )

//////

層序遍歷

//////

public

static

void levelroot( treenode tree )}}

treenode node = new treenode();

test.createtree( node );

test.firstroot( node );

test.middleroot( node );

test.laterroot( node );

test.levelroot( node );

建立的時候,是先序建立樹

參考輸入a回車

b回車d回車

回車回車e回車

回車回車c回車

f回車回車回車g回車

回車回車

得到的層序遍歷結果應該是ab

cdef

g

二叉樹遍歷演算法詳解 附原始碼

前言 知道了樹的遍歷的型別以及概念,接下來我們就要設計演算法將其用 優雅的表述出來。還不清楚概念的可以看另一篇部落格 樹的遍歷基本概念 開發語言 c 編輯器 clion 專案原始碼 樹的遍歷 我們以這棵樹為例 在寫 之前首先定義樹的結構體,並且初始化建立一棵樹 定義樹節點的結構體 struct tr...

廣度遍歷二叉樹和深度遍歷二叉樹演算法

二叉樹演算法基本和遞迴有關,前中後序演算法就不提了,主要看一下深度優先遍歷和廣度優先遍歷。實現這2種遍歷需要借助棧或者佇列來儲存中間結果,原因是遍歷過程出現了回溯。1 筆試題 廣度遍歷二叉樹 深度遍歷二叉樹 23 include4 include5 include6 7using namespace...

二叉樹遍歷演算法

二叉樹是一種非線性的資料結構,在對它進行操作時,總是需要逐一對每個資料元素實施操作,這樣就存在乙個操作順序問題,由此提出了二叉樹的遍歷操作。所謂遍歷二叉樹就是按某種順序訪問二叉樹中的每個結點一次且僅一次的過程。這裡的訪問可以是輸出 比較 更新 檢視元素內容等等各種操作。在這裡寫了個二叉樹遍歷演算法 ...