C語言實現二叉樹的遞迴遍歷和非遞迴遍歷

2021-07-03 17:38:54 字數 1909 閱讀 3679

//遞迴實現二叉樹的遍歷

#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指向剛出棧節點的右孩子節點,對右子樹進行同樣的處...