二叉树遍历C++11实现———前序、中序、后序、层序遍历(非递归)
2017-12-14 23:08
393 查看
Makefile:
g++ -std=c++11 -o biTreeTrasverse biTreeTrasverse.cpp
代码:
biTreeTrasverse.cpp
#include <stack> #include <queue> #include <iostream> struct node { char val; node* left; node* right; };
前序遍历
void preOrder(node *root) { std::stack<node*> stack; node *p = root; while ((nullptr != p) || (!stack.empty())) { while (nullptr != p) { std::cout << p->val; stack.push(p); p = p->left; } if (!stack.empty()) { p = stack.top(); stack.pop(); p = p->right; } } }
中序遍历
void inOrder(node *root) { std::stack<node*> stack; node *p = root; while ((nullptr != p) || (!stack.empty())) { while (nullptr != p) { stack.push(p); p = p->left; } if (!stack.empty()) { p = stack.top(); stack.pop(); std::cout << p->val; p = p->right; } } }
后续遍历
void postOrder(node *root) { std::stack<node*> stack; std::stack<node*> store; node *p = root; while ((nullptr != p) || (!stack.empty())) { while (nullptr != p) { store.push(p); stack.push(p); p = p->right; } if (!stack.empty()) { p = stack.top(); stack.pop(); p = p->left; } } while (!store.empty()) { p = store.top(); store.pop(); std::cout << p->val; } }
层序遍历
void levelOrder(node* root) { std::queue<node*> queue; if (nullptr != root) { queue.push(root); } while (!queue.empty()) { node* p = queue.front(); queue.pop(); std::cout << p->val; if (nullptr != p->left) { queue.push(p->left); } if (nullptr != p->right) { queue.push(p->right); } } }
main函数
int main() { node K{'K', nullptr, nullptr}; node J{'J', nullptr, nullptr}; node I{'I', nullptr, nullptr}; node H{'H', nullptr, &K}; node G{'G', nullptr, &J}; node F{'F', &I, nullptr}; node E{'E', nullptr, nullptr}; node D{'D', &H, nullptr}; node C{'C', &F, &G}; node B{'B', &D, &E}; node A{'A', &B, &C}; node *root = &A; std::cout << "preOrder: "; preOrder(root); std::cout << std::endl; std::cout << "inOrder: "; inOrder(root); std::cout << std::endl; std::cout << "postOrder: "; postOrder(root); std::cout << std::endl; std::cout << "levelOrder:"; levelOrder(roo 97ea t); std::cout << std::endl; }
二叉树
结果
preOrder: ABDHKECFIGJ inOrder: HKDBEAIFCGJ postOrder: KHDEBIFJGCA levelOrder: ABCDEFGHIJK
相关文章推荐
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- C语言非递归实现二叉树的先序、中序、后序、层序遍历
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树先序,中序,后序、层序遍历递归和非递归实现
- Java实现二叉树的递归构建及先序、中序、后序、层序遍历(递归和循环)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)