//中序遍歷
void
inorderwithoutrecursion1
(btnode* root)
//當p為空時,說明已經到達左子樹最下邊,這時需要出棧了if(
!s.empty()
)}}
## 先序
```cpp
void preorderwithoutrecursion1(btnode* root)
//當p為空時,說明根和左子樹都遍歷完了,該進入右子樹了
if (!s.empty())
}cout << endl;
}
//後序遍歷
void
postorderwithoutrecursion
(btnode* root)
while
(!s.
empty()
)/*這裡的else語句可換成帶條件的else if:
else if (pcur->lchild == plastvisit)//若左子樹剛被訪問過,則需先進入右子樹(根節點需再次入棧)
因為:上面的條件沒通過就一定是下面的條件滿足。仔細想想!
*/else}}
cout << endl;
}
原出處 二叉樹三種遍歷的非遞迴演算法
1.先序遍歷非遞迴演算法 define maxsize 100 typedef struct sqstack void preorderunrec bitree t endwhile if stackempty s 通過下一次迴圈中的內嵌while實現右子樹遍歷 endif endwhile pre...
二叉樹的三種非遞迴遍歷
一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...
二叉樹的三種非遞迴遍歷
遞迴演算法和非遞迴演算法的轉換 可以借助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃瞄 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰乙個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃瞄該結點的有孩子結點,將其...