144. Binary Tree Preorder Traversal
2016-05-30 08:47
302 查看
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?
题意:迭代实现栈的先序遍历。
思路:使用栈。先读取,再入栈。
/**
* Definition for a binary tree node.
* 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> res;
stack<TreeNode*> mystack;
TreeNode *p = root;
while (p){
res.push_back(p->val);
mystack.push(p);
p = p->left;
}
while (!mystack.empty()){
TreeNode* q = mystack.top();
mystack.pop();
q = q->right;
while (q){
res.push_back(q->val);
mystack.push(q);
q = q->left;
}
}
return res;
}
};
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?
题意:迭代实现栈的先序遍历。
思路:使用栈。先读取,再入栈。
/**
* Definition for a binary tree node.
* 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> res;
stack<TreeNode*> mystack;
TreeNode *p = root;
while (p){
res.push_back(p->val);
mystack.push(p);
p = p->left;
}
while (!mystack.empty()){
TreeNode* q = mystack.top();
mystack.pop();
q = q->right;
while (q){
res.push_back(q->val);
mystack.push(q);
q = q->left;
}
}
return res;
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性