//遞迴實現二叉樹的遍歷
#include
#include
#define stackinitsize 100
#define stackincreasesize 20
typedef char elemtype;
//樹結構
typedef struct tree
treenode,*tree;
//建立樹,以先序序列建立樹
void createtree(tree &t)
t->data = ch;
createtree(t->lchild);
createtree(t->rchild);}}
//遞迴先序遍歷
void preorder(tree t)
}//遞迴中序遍歷
void inorder(tree t)
}//遞迴後序遍歷
void postorder(tree t)
}int main()
執行結果:
//非遞迴遍歷借助棧來實現
#include
#include
#define stackinitsize 100
#define stackincreasesize 20
typedef char elemtype;
//樹結構
typedef struct tree
treenode,*tree;
//棧結構
typedef struct stack
sqstack;
//初始化棧
void initstack( sqstack &s )
s.top = s.base;
s.stacksize = stackinitsize;
//元素入棧
void push( sqstack &s, tree e )
s.top = s.base + s.stacksize;
s.stacksize += stackincreasesize;
}e->isout = 0;
*s.top++ = e;
}//獲得棧頂元素
void gettop( sqstack s, tree &e )
//彈出棧頂元素
void pop( sqstack &s, tree &e )
e = *(--s.top);
}//判斷棧是否為空,為空返回1,否則返回0
int stackempty( sqstack s )
//建立樹,以先序序列建立樹
void createtree(tree &t)
t->data = ch;
createtree(t->lchild);
createtree(t->rchild);}}
//非遞迴先序遍歷
void preorder(tree t)
else}}
//非遞迴中序遍歷
void inorder(tree t)
else }
}//非遞迴後序遍歷
void postorder(tree t)
else
else}}
else
else
else
p = null;}}
}}int main()
執行結果:
二叉樹非遞迴遍歷(c語言)
結果如下圖 號代表null,此時沒有節點 一 在c語言中進行二叉樹的非遞迴遍歷需要用到棧,而在c語言中沒有直接呼叫棧的介面,所以在實現非遞迴遍歷時需要先實現乙個棧,需要用到出棧,入棧,棧頂元素,判斷棧是否為空,這四個介面,別的可以不用實現。二 實現棧的介面 注意 這裡棧的陣列需要用到的型別時node...
二叉樹遍歷遞迴和非遞迴實現
遍歷一共有三種,前序中序後序,下面直接上 吧,外加執行結果 include include include include include using namespace std 定義乙個樹節點 typedef struct tag tree node tree node,tree node p 建...
二叉樹非遞迴遍歷c 實現
三種遍歷演算法均採用棧來實現 1.前序遍歷 先訪問根節點,再訪問左子樹,最後訪問右子樹 先將根節點進棧,棧不空時迴圈 2.中序遍歷演算法 左中右 從根節點開始,將所有左節點一一進棧,當無左節點時表示棧頂節點無左子樹,然後出棧這個節點,並訪問它,將tmp指向剛出棧節點的右孩子節點,對右子樹進行同樣的處...