資料結構 二叉樹的遍歷

2021-08-30 17:35:11 字數 1346 閱讀 5117

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

n:訪問根結點,l:遍歷根結點的左子樹,r:遍歷根結點的右子樹。

給定一棵二叉樹的前序遍歷序列和中序遍歷序列可以惟一確定一棵二叉樹。

二叉樹的深度優先遍歷的非遞迴的通用做法是採用棧,廣度優先遍歷的非遞迴的通用做法是採用佇列。

1. 中序遍歷(lnr)的遞迴演算法:

若二叉樹為空,則演算法結束;否則:

中序遍歷根結點的左子樹;

訪問根結點;

中序遍歷根結點的右子樹。

2. 前序遍歷(nlr)的遞迴演算法:

若二叉樹為空,則演算法結束,否則:

訪問根結點;

前序遍歷根結點的左子樹;

前序遍歷根結點的右子樹。

3. 後序遍歷(lrn)的遞迴演算法:

若二叉樹為空,則演算法結束,否則:

後序遍歷根結點的左子樹;

後序遍歷根結點的右子樹;

訪問根結點。

棧是實現遞迴最常用的結構,利用乙個棧來記下尚待遍歷的結點或子樹,以備以後訪問,可以將遞迴的深度優先遍歷改為非遞迴的演算法。

1. 非遞迴前序遍歷:遇到乙個結點,就訪問該結點,並把此結點推入棧中,然後下降去遍歷它的左子樹。遍歷完它的左子樹後,從棧頂托出這個結點,並按照它的右鏈結指示的位址再去遍歷該結點的右子樹結構。

3. 非遞迴後序遍歷:遇到乙個結點,把它推入棧中,遍歷它的左子樹。遍歷結束後,還不能馬上訪問處於棧頂的該結點,而是要再按照它的右鏈結結構指示的位址去遍歷該結點的右子樹。遍歷完右子樹後才能從棧頂托出該結點並訪問之。另外,還需要給棧中的每個元素加上乙個特徵位,以便當從棧頂托出乙個結點時區別是從棧頂元素左邊回來的(則要繼續遍歷右子樹),還是從右邊回來的(則該結點的左、右子樹均已遍歷)。特徵為left表示已進入該結點的左子樹,將從左邊回來;特徵為right表示已進入該結點的右子樹,將從右邊回來。

非遞迴廣度優先遍歷二叉樹(層序遍歷)是用佇列來實現的。從二叉樹的第一層(根結點)開始,自上至下逐層遍歷;在同一層中,按照從左到右的順序對結點逐一訪問。

按照從根結點至葉結點、從左子樹至右子樹的次序訪問二叉樹的結點。演算法如下:

1. 初始化乙個佇列,並把根結點入佇列;

2. 當隊列為非空時,迴圈執行步驟3到步驟5,否則執行6;

3. 出佇列取得乙個結點,訪問該結點;

4. 若該結點的左子樹為非空,則將該結點的左子樹入佇列;

5. 若該結點的右子樹為非空,則將該結點的右子樹入佇列;

6. 結束。

給我老師的人工智慧教程打call!

mysql 遍歷二叉樹 資料結構 二叉樹遍歷

這篇博文主要是研究二叉樹遍歷的遞迴與非遞迴演算法,有興趣的小夥伴可以了解下!二叉樹的遞迴遍歷 深度優先遍歷 先來張圖,看看各結點遍歷時的情況 二叉樹深度優先遍歷總結 分別為第一次,第二次,第三次進入某個結點 先序遍歷 先訪問根結點,然後先序遍歷左子樹,最後先序遍歷右子樹 根 左 右 中序遍歷 先中序...

資料結構 遍歷二叉樹

資料結構實驗之二叉樹二 遍歷二叉樹 time limit 1000ms memory limit 65536kb submit statistic problem description 已知二叉樹的乙個按先序遍歷輸入的字串行,如abc,de,g,f,其中,表示空結點 請建立二叉樹並按中序和後序的方...

資料結構 遍歷二叉樹

二叉樹的遍歷原理 二叉樹的遍歷是指從根節點出發,按照某種次序以此訪問二叉樹所有節點,使得每個節點被訪問一次且僅被訪問一次 二叉樹遍歷方法 1.前序遍歷 規則是若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹 2.中序遍歷 規則是若樹為空,則空操作返回,否則從根節點開...