1. 程式人生 > >二叉樹非遞迴遍歷c++實現

二叉樹非遞迴遍歷c++實現

三種遍歷演算法均採用棧來實現

1.前序遍歷:先訪問根節點,再訪問左子樹,最後訪問右子樹

先將根節點進棧,棧不空時迴圈:{出棧tmp,訪問tmp,若其右子樹節點不空則將tmp的右孩子節點進棧,若其左孩子節點不空則將tmp的左孩子節點進棧。}

2.中序遍歷演算法:左中右

從根節點開始,將所有左節點一一進棧,當無左節點時表示棧頂節點無左子樹,然後出棧這個節點,並訪問它,將tmp指向剛出棧節點的右孩子節點,對右子樹進行同樣的處理

3後序遍歷演算法:

先掃描根節點的所有左孩子節點並一一進棧,出棧一個節點*p作為當前節點,然後掃描該節點的右子樹,當一個節點的左右孩子節點均已被訪問後再訪問該節點,重複此操作;

如何判斷一個節點的右子樹已被訪問過:用tmp指向剛剛訪問過的節點(初值為NULL),若p->rchild==tmp,則說明b的左右子樹均已被訪問,可以訪問b了。