二叉树遍历C++11实现———前序、中序、后序、层序遍历(非递归)
来源:互联网 发布:淘宝怎么提高排名信誉 编辑:程序博客网 时间:2024/04/28 13:40
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(root); std::cout << std::endl;}
二叉树
结果
preOrder: ABDHKECFIGJinOrder: HKDBEAIFCGJpostOrder: KHDEBIFJGCAlevelOrder: ABCDEFGHIJK
阅读全文
0 0
- 二叉树遍历C++11实现———前序、中序、后序、层序遍历(非递归)
- C++实现二叉树的非递归遍历(层,前,中,后序)
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- 二叉树各种非递归遍历——前序、中序、后序、层序遍历
- (C语言版)二叉树遍历算法——包含递归前、中、后序和层次,非递归前、中、后序和层次遍历共八种
- 二叉树非递归前、中、后序遍历实现
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- C# 二叉树的非递归中序 前序 后序遍历 层序遍历
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- 二叉树的,前/中/后序的遍历( 递归,非递归),层序遍历,以及各种应用功能
- 二叉树相关操作(前序遍历,中序遍历,后序遍历,层次序遍历等)递归和非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- A*算法
- bootstrap datatimepicker 时间选择插件---精确到时分秒
- Chrome 扩展开发教程(3)——content_scripts用法
- Delphi-VclZip用法详解 (2011-09-28 23:59:18)
- 正则表达式 匹配特殊字符js
- 二叉树遍历C++11实现———前序、中序、后序、层序遍历(非递归)
- [LUOGU1011]车站
- 机器学习系统设计(7)
- 第九周项目3--利用二叉树遍历思想解决问题
- OpenSSL编程-DES编程详解
- 串口读写(python)
- 大数乘法
- oracle 错删表数据之后的操作
- 454. 4Sum II