LeetCode Binary Tree Traversal
2014-03-17 09:27
225 查看
1. 非递归的先序遍历
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree
return
Note: Recursive solution is trivial, could you do it iteratively?
2. 非递归的中序遍历
3. 非递归的后序遍历
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
#include <vector> #include <stack> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: vector<int> preorderTraversal(TreeNode *root) { vector<int> ivec; stack<TreeNode*> treestk; if(root == NULL) return ivec; TreeNode* curr = root; while(curr != NULL || !treestk.empty()) { while(curr != NULL) { ivec.push_back(curr->val); treestk.push(curr); curr = curr->left; } curr = (treestk.top())->right; treestk.pop(); } return ivec; } };
2. 非递归的中序遍历
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> ivec; if(root == NULL) return ivec; stack<TreeNode*> treestk; TreeNode* curr = root; while(curr != NULL || !treestk.empty()) { while(curr != NULL) { treestk.push(curr); curr = curr->left; } ivec.push_back((treestk.top())->val); curr = (treestk.top())->right; treestk.pop(); } } };
3. 非递归的后序遍历
#include <vector> #include <stack> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: vector<int> postorderTraversal(TreeNode *root) { vector<int> ivec; stack<pair<TreeNode*, bool>> treestk; if(root == NULL) return ivec; treestk.push(make_pair(root, false)); while(!treestk.empty()) { auto& curr = treestk.top(); if(curr.second) { ivec.push_back((curr.first)->val); treestk.pop(); } else { curr.second = true; if((curr.first)->right != NULL) { treestk.push(make_pair((curr.first)->right,false)); } if((curr.first)->left != NULL) { treestk.push(make_pair((curr.first)->left,false)); } } } } };
相关文章推荐
- [家里蹲大学数学杂志]第279期丘成桐大学生数学竞赛2011年分析与方程团体赛试题参考解答
- 用端口映射在Apache中对每个项目分配端口,实现一个端口访问一个网站
- DataGuard ORA-01111文件创建失败问题解决
- rsync同步开源软件
- Python类里的静态方法函数
- SMP、NUMA、MPP体系结构介绍
- Centos硬件信息查看命令
- 风吹过树梢
- 线程池
- “雷神之怒!”
- Java的对象驻留
- 对Objective-c委托的理解
- PHP $_SERVER 变量
- 高德地图警告解决
- IOS 启动画面和图标设置(适配IOS7 and Xcode5)
- Google的 FindBugs 实践
- 华章书院(读书会) 104期(第五空间战略—大国间的网络博弈)
- svn(subversion)版本控制系统学习与理解
- [原]zeromq框架测试报告
- OpenCV进阶之路:神经网络识别车牌字符