二叉樹遍歷實現(前中後層次 遞迴非遞迴)

2021-09-25 13:37:28 字數 1273 閱讀 9224

一.前序遍歷

#include#include#includeusing namespace std;

struct binarytreenode ;

//遞迴實現

void preorder1(binarytreenode* proot)

if (proot->m_pright != nullptr) }}

//非遞迴實現

void preorder2(binarytreenode* proot)

if (p->m_pleft != nullptr)

}}

二.中序遍歷

//遞迴實現

void inorder1(binarytreenode* proot)

cout << proot->m_nvalue << " ";

if (proot->m_pright != nullptr) }}

//非遞迴實現

void inorder2(binarytreenode* proot)

else

}}

三.後序遍歷

//遞迴實現

void postorder1(binarytreenode* proot)

if (proot->m_pright != nullptr)

cout << proot->m_nvalue << " "; }}

//非遞迴實現

void postorder2(binarytreenode* proot)

else

//第二種情況:右子樹不存在或者右子樹訪問過=>訪問該節點

else

} }}

四.層次遍歷

void levelorder(binarytreenode* proot) 

if (p->m_pright != nullptr)

}}

測試補充**

binarytreenode* createbinarytreenode(double nvalue)

void connecttreenodes(binarytreenode* pparent, binarytreenode* pleft, binarytreenode* pright)

}void destroytree(binarytreenode* proot)

}int main()

二叉樹的遍歷(前 中 後 層次)遞迴與非遞迴實現

遞迴 void preorder btnode root void preorder btnode root if s.empty cout 遞迴 void inorder btnode root void inorder btnode root if s.empty cout 遞迴 void po...

二叉樹的前中後遍歷遞迴非遞迴實現

好吧,我終於把前中後 遞迴和非遞迴的都寫出來了。如下 不解釋 include includeusing namespace std struct btnode void assertbtn btnode root1,int a else 非遞迴前序遍歷 stack s pre void preord...

二叉樹的前中後序遍歷非遞迴實現及層次遍歷佇列實現

二叉樹的層次遍歷實現思想 和圖的廣度優先遍歷思想一致 先建立乙個二叉樹結點型別佇列,根結點若不為空則入隊 緊接著對頭出隊,馬上訪問輸出出隊結點的資料域,出隊的同時判斷該結點是否有左右孩子,有的話則統統入隊,注 左右孩子都有時先左孩子入隊,先進先出嘛在隊不為空的情況下迴圈執行以上兩步 好了,上 才是王...