二叉樹非遞迴遍歷的幾個要點:
1)不管前序、中序還是後序,它們的遍歷路線(或者說是回溯路線,先沿左邊一直走到盡頭,然後回溯到某節點,並跳轉到該節點的右孩子(如果有的話),然後又沿著這個有孩子的左邊一直走到盡頭)都是一樣的。
2)明確每次回溯的目的。比如,前序回溯的目的是為了訪問右子樹;中序回溯的目的是為了先訪問根節點,後訪問右子樹;後序回溯的目的是為了先訪問右子樹,後訪問根節點。
3)有了1)
2)知識之後,就比較容易進行分析。比如,前序中回溯的目的是為了訪問右子樹,所以當回溯到某點的時獲取了該節點的右孩子之後,該節點就沒有用了。所以可以直接出棧。中序中回溯到某節點時,訪問完根節點並獲取右子樹之後,該節點也就沒用了,可以直接出棧。後序中回溯到某節點時,因為要先訪問完右子樹後才訪問根節點,所以根節點不能立即出棧,而要做乙個標記(在其上邊放置乙個空指標
0),當從左子樹回溯回來時再訪問該節點。
一、二叉樹的構造
二、三種方法非遞迴遍歷二叉樹
三、main函式測試
四、三種非遞迴遍歷二叉樹演算法的偽**
二叉樹遍歷(遞迴 非遞迴)
二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...
非遞迴遍歷二叉樹
中序遞迴遍歷 void inordertrvdigui node pnode 然而,當樹的深度很大 比如16 時 假設為滿二叉樹 樹的節點數為 2 0 2 1 2 2 2 15 2 16 65536,遍歷整個二叉樹意味著有65536次函式呼叫,這將極大地增加程式執行時間。這時,應該採取非遞迴便利二叉...
二叉樹非遞迴遍歷
1.先序遍歷 從遞迴說起 void preorder tnode root 遞迴演算法非常的簡單。先訪問跟節點,然後訪問左節點,再訪問右節點。如果不用遞迴,那該怎麼做呢?仔細看一下遞迴程式,就會發現,其實每次都是走樹的左分支 left 直到左子樹為空,然後開始從遞迴的最深處返回,然後開始恢復遞迴現場...