二叉树的前中后序遍历的模板实现
来源:互联网 发布:出租车打车软件 编辑:程序博客网 时间:2024/06/05 02:00
模拟递归的过程,利用栈的特点来实现遍历。
我们增加一个结构体,用来标示当前的状态:printf/go 来完成前中后序的遍历。
struct Command { string s; //ptint/go两种状态 TreeNode* node; Command(string s,TreeNode* node) :s(s),node(node) {} };
前序遍历
struct Command { string s; TreeNode* node; Command(string s,TreeNode* node) :s(s),node(node) {} };class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int >res; if(root==NULL) { return res; } stack<Command> stack; stack.push(Command("go",root)); while(!stack.empty()) { Command command=stack.top(); stack.pop(); if(command.s=="print") { res.push_back(command.node->val); } else { if(command.node->right) { stack.push(Command("go",command.node->right)); } if(command.node->left) { stack.push(Command("go",command.node->left)); } stack.push(Command("print",command.node));//控制入栈与访问的先后顺序 } } return res; }
中序遍历
struct Command { string s; TreeNode* node; Command(string s,TreeNode* node) :s(s),node(node) {} };class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int >res; if(root==NULL) { return res; } stack<Command> stack; stack.push(Command("go",root)); while(!stack.empty()) { Command command=stack.top(); stack.pop(); if(command.s=="print") { res.push_back(command.node->val); } else { if(command.node->right) { stack.push(Command("go",command.node->right)); } stack.push(Command("print",command.node)); if(command.node->left) { stack.push(Command("go",command.node->left)); } } } return res; }
后序遍历
struct Command { string s; TreeNode* node; Command(string s,TreeNode* node) :s(s),node(node) {} };class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int >res; if(root==NULL) { return res; } stack<Command> stack; stack.push(Command("go",root)); while(!stack.empty()) { Command command=stack.top(); stack.pop(); if(command.s=="print") { res.push_back(command.node->val); } else { stack.push(Command("print",command.node)); if(command.node->right) { stack.push(Command("go",command.node->right)); } if(command.node->left) { stack.push(Command("go",command.node->left)); } } } return res; }
阅读全文
0 0
- 二叉树的前中后序遍历的模板实现
- 二叉树的遍历模板
- 【模板】二叉树的遍历
- 二叉树的遍历 C++模板+封装
- 二叉树的建立与遍历【模板】
- 二叉树遍历的实现
- 二叉树的遍历实现
- 二叉树 的模板实现
- 二叉树的实现和二叉数的遍历实现
- 二叉树的递归、迭代遍历的模板代码
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 二叉树的前中后序遍历
- 树的遍历、平衡二叉树实现
- 树的遍历及二叉树实现
- 数据库中实现二叉树的遍历
- C#中实现二叉树的遍历
- C++开发Office插件:实现Word插件
- USB自动侦测USB盘符
- 第31课: Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结
- opencv 稀疏光流 稠密光流
- datatable导出CSV
- 二叉树的前中后序遍历的模板实现
- ObjC Runtime 中 Weak 属性的实现 (中)
- [LeetCode]Median of Two Sorted Arrays
- Android文件存储--采用SharedPreferences保存用户偏好设置
- 2017最新win系统下Zcash挖矿(ZEC挖矿)零币CPU挖矿教程【亲测有图有真相】
- 侦测USB插入动作,不用侦测盘符
- HDU3421 Max Sum II【序列处理】
- 填坑计划(持续更新中)
- [leetCode刷题笔记]199. Binary Tree Right Side View