非遞迴方法實現的數的中序遍歷

2021-06-19 00:29:47 字數 455 閱讀 2664

方法如下:

1.樹(子樹)根節點入棧,但是不訪問

2.左子樹入棧,左子樹的各子樹依次入棧

3.當左子樹為空時,出棧,訪問根節點

4.根節點右子樹入棧(新樹入棧,按照步驟1裡面那樣繼續處理)

5.當右子樹為空時,出棧,訪問祖先節點,將爺爺節點的右子樹入棧(新樹入棧,回到步驟1)

總之為:樹入棧後一直朝左走(一路進棧),

走不動時出棧並訪問節點。同時將該節點右子樹入棧。

如果其右子樹為空,就再出棧乙個節點,訪問,出棧節點右子樹入棧

//p為指向樹中各節點的指標。stack為儲存樹的各個節點的棧。
while( ! end_of(tree))

else}

其中end_of()的判斷條件可以為p != null || !empty(stack);

非遞迴實現先序遍歷和中序遍歷

先序建立二叉樹,表示空結點。使用棧,實現非遞迴先序遍歷和中序遍歷。使用佇列實現層次遍歷。直接上 寒假完善注釋,甚至從頭到尾把 資料結構與演算法 的相關 寫一遍。include include include include using namespace std typedef char datat...

中序遍歷(非遞迴)

前序遍歷 前序遍歷的遞迴實現 void preorder bintree root 非遞迴實現 根據前序遍歷訪問的順序,優先訪問根節點,然後再分別訪問左孩子和右孩子。即對於任一節點,其可看做是根節點,因此可以直接訪問,訪問完之後,若其左孩子 不為空,按相同規則訪問它的左子樹,當訪問其左子樹時,在訪問...

中序遍歷的非遞迴演算法

1.中序遍歷的非遞迴演算法演算法思想 利用棧來代替遞迴遍歷 1.初始時依次掃瞄根節點及根節點的左側結點,並將一一入棧,如果結點不存在,結束入棧 2.當結點不存在時 出棧乙個結點,訪問它 可以是輸出結點的資料域的值 3.掃瞄該結點的右孩子結點,並將其入棧 4.依次掃瞄該右孩子的所有左側結點,並將一一入...