二叉樹的非遞迴遍歷:
先序遍歷,中序遍歷,後序遍歷
#include #include using namespace std;
typedef struct node
binode, *bitree;
//先序遞迴建立樹,這裡注意引數的型別,t的型別是 "*&" ,如果是 "**" **稍加改動就ok...
void createtree(bitree &t)
}void preordernore(bitree t) // 前序遍歷
stacks;
bitree p = null;
p = t;
while( p != null || !s.empty())
if(!s.empty())
}}void inordernore(bitree t) //中序遍歷
stacks;
bitree p = null;
p = t;
while(p != null || !s.empty())
if (!s.empty())
}}void postordernore(bitree t) //後序遍歷
bitree p = null;
stacks;
p = t;
int tag[200]; // 棧,用於標識從左(0)或右(1)返回
int top = -1;
while ( p != null || !s.empty())
while ( !s.empty() && tag[top] == 1)
if (!s.empty())
else
}}int main()
{ cout<<"enter char one by one"<
by andy @2013-09-08
二叉樹的非遞迴遍歷(先序,中序,後序)
遍歷演算法 1 中序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 遍歷左子樹 2 訪問根結點 3 遍歷右子樹。2 先序遍歷的遞迴演算法定義 若二叉樹非空,則依次執行如下操作 1 訪問根結點 2 遍歷左子樹 3 遍歷右子樹。3 後序遍歷得遞迴演算法定義 若二叉樹非空,則依次執行如下操作 ...
二叉樹的非遞迴先序 中序 後序遍歷
演算法思想 先序 nlr的訪問順序,由於r節點,即右孩子的訪問需要通過根節點的指標來實現,所以,需要設乙個棧來儲存根節點。具體看 void preorder btree t else while 中序遍歷和先序遍歷幾乎一樣 void midorder btree t else 後序遍歷 lrn順序。...
二叉樹非遞迴實現先序 中序 後序遍歷
測試資料 abc000de0f00g00 這是乙個先序序列 0表示當前結點為空 include includetypedef struct node node char chin 100 陣列從儲存獲取的二叉樹序列元素 int m int initchain node q,int step if q...