資料結構 二叉樹的遍歷

2021-09-24 20:49:26 字數 1160 閱讀 9809

遍歷演算法(非遞迴)

遍歷演算法(遞迴)

由二叉樹的先序和中序序列建樹

順著某一條搜尋路徑巡訪二叉樹中的結點,使得每個結點均被訪問一次,而且僅被訪問一次。

「訪問」的含義可以很廣,如:輸出結點的資訊等。

「遍歷」是任何型別均有的操作,對線性結構而言,只有一條搜尋路徑(因為每個結點均只有乙個後繼),故不需要另加討論。而二叉樹是非線性結構,每個結點有兩個後繼,則存在如何遍歷即按什麼樣的搜尋路徑進行遍歷的問題。

對於「二叉樹」而言,可以有3條搜尋路徑:

先上後下的按層次遍歷;

先左(子樹)後右(子樹)的遍歷;

先右(子樹)後左(子樹)的遍歷。

若二叉樹為空樹,則空操作;否則,

訪問根結點;

先序遍歷左子樹;

先序遍歷右子樹。

若二叉樹為空樹,則空操作;否則,

中序遍歷左子樹;

訪問根節點;

中序遍歷右子樹。

若二叉樹為空樹,則空操作;否則,

後序遍歷左子樹;

後序遍歷右子樹。

訪問根節點;

void preorder(bitree t, void(*visit)(int &e)

}

由中序遍歷過程可知,採用乙個棧儲存需要返回的結點指標,先掃瞄(並非訪問)根結點的所有左結點並將它們一一進棧。

然後出棧乙個結點,顯然該結點沒有左孩子結點或者左孩子結點已訪問過,則訪問它。

然後掃瞄該結點的右孩子結點,將其進棧,再掃瞄該右孩子結點的所有左結點並一一進棧,如此這樣,直到棧空為止。

void inorder(bttree root) else }}

由先序遍歷過程可知,先訪問根結點,再訪問左子樹,最後訪問右子樹。

因此,先將根結點進棧,在棧不空時迴圈:出棧p,訪問*p結點,將其右孩子結點進棧,再將左孩子結點進棧。

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

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

資料結構 遍歷二叉樹

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

資料結構 遍歷二叉樹

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