資料結構 二叉樹遍歷

2021-09-11 11:28:33 字數 1683 閱讀 3099

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

訪問其實是要根據實際的需要來確定具體做什麼,比如對每個結點進行相關計算,輸出列印等。它算作是乙個抽象操作。

二叉樹的遍歷次序不同於線性結構,最多也就是從頭到尾、迴圈和雙向等簡單的遍歷方式。樹的結點之間不存在唯一的前驅和後繼關係,在訪問乙個結點後,下乙個被訪問的結點面臨著不同的選擇。

二叉樹的遍歷方式可以有很多,如果我們限制從左到右的順序,就主要分為四種:

前序遍歷

中序遍歷

後序遍歷

層序遍歷

1、前序遍歷

若二叉樹為空,則空操作返回,否則先訪問根結點,然後前序遍歷左子樹,再前序遍歷右子樹。如下圖遍歷順序為:abdghceif。

2、中序遍歷

若二叉樹為空,則空操作返回,否則從根結點開始(注意並不是先訪問根結點),中序遍歷根結點左子樹,然後訪問根結點,最後中序遍歷右子樹,如下圖遍歷順序為:gdhbaeicf。

3、後序遍歷

若二叉樹為空,則空操作返回,否則從左到右先葉子後結點的方式遍歷訪問左右子樹,最後是訪問根結點,如下圖遍歷順序為:ghdbiefca。

4、層序遍歷

若二叉樹為空,則空操作返回,否則從樹的第一層開始,也就是從根結點開始訪問,從上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問,如下圖遍歷順序為:abcdefghi。

我們提到的四種遍歷方式,其實都是在把樹種的結點程式設計某種意義上的線性序列,這樣給程式執行帶來了好處。

層序遍歷很好理解,就是逐層遍歷,每層從左到右逐個遍歷;前序、中序、後序遍歷最根本的區別就是雙親結點的訪問時機:前序是先訪問雙親結點,然後左孩子,最後右孩子;中序是左孩子,雙親,右孩子;後序是左孩子、右孩子最後雙親結點。

樹的定義就使用了遞迴這一方式,當然,對樹的遍歷也是使用遞迴(注意遞迴演算法一定要有結束遞迴的標誌),關於二叉樹遍歷的演算法,就不再詳細描述了。

有一種題目是為了考察你對二叉樹遍歷的掌握程度,會這樣出題:已知一棵二叉樹的前序遍歷順序是abcdef,中序遍歷順序是cbaedf,請問這棵樹的後序遍歷是什麼?

對於這樣的題目,如果真正了解各種遍歷規則,其實是不難的。

三種遍歷都是從根結點開始,前序遍歷是先列印再遞迴左和右,所有前序遍歷序列為abcdef,第乙個字母a就是根結點;再由中序遍歷序列cbaedf,可以只帶c和b是a的左子樹上的結點,e、d、f是a的右子樹上的結點,我們可以得到以下這樣的圖:

然後再看前序序列中的c和b,先b再c,所以b應該是a的左孩子,c就只能說b的孩子了,至於c是b的左還是右孩子,再看中序序列cbaedf,c在b之前列印,說明c是b的左孩子,如圖:

再看前序中的e、d、f,他們的順序是abcdef,意味著d是a的右孩子,e和f是d的子孫(注意,他們中有乙個不一定是孩子,還可能是孫子)。再看中序序列是cbaedf,e在d的左側,f在右側,所以e是d的左孩子,f是d的右孩子,如圖:

為了避免推導失誤,我們最好自己再按此樹推導一遍前序和中序遍歷序列。根據二叉樹結構圖,輕鬆得到後序遍歷為cbefda。

這裡我們可以得到兩個二叉樹遍歷的性質:

已知前序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹;

已知後序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹;

注意:已知前序和後序遍歷,是不能確定一棵二叉樹的。

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

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

資料結構 遍歷二叉樹

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

資料結構 遍歷二叉樹

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