leetcode_c++:栈: Binary Tree Postorder Traversal(145)
2016-07-22 15:45
429 查看
Given a binary tree, return the postorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [3,2,1].
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [3,2,1].
递归
class Solution { private: void orderHelper(vector<int> &res, TreeNode *cur) { if (!cur) return; if (cur->left) orderHelper(res, cur->left); if (cur->right) orderHelper(res, cur->right); res.push_back(cur->val); } public: vector<int> postorderTraversal(TreeNode *root) { vector<int> res; orderHelper(res, root); return res; } };
技巧
pre-order ,然后反转vector<int> postorderTraversal1(TreeNode *root) { vector<int> v; vector<TreeNode*> stack; if (root) { stack.push_back(root); } while (stack.size()>0){ TreeNode *n = stack.back(); stack.pop_back(); v.push_back(n->val); if (n->left){ stack.push_back(n->left); } if (n->right) { stack.push_back(n->right); } } std::reverse(v.begin(), v.end()); // the trick return v; }
迭代
// traditional and standard way. // using the stack to simulate the recursive function stack. vector<int> postorderTraversal2(TreeNode *root) { vector<int> v; vector<TreeNode*> stack; TreeNode *node = root; TreeNode *lastVisitNode = NULL; while(stack.size()>0 || node!=NULL){ if (node != NULL){ // keep going the left stack.push_back(node); node = node->left; }else{ TreeNode *n = stack.back(); // left way is finsised, keep going to the right way if (n->right != NULL && lastVisitNode != n->right){ node = n->right; }else{ // both left and right has been accessed. stack.pop_back(); v.push_back(n->val); lastVisitNode = n; } } } return v; }
相关文章推荐
- 实验项目2-6:数列求和
- 【C/C++】将字符串按空格逆置
- Qt/C++ Lambda 表达式
- c++ efective
- leetcode_c++:栈:Binary Tree Preorder Traversal(144)
- 【poj 2431】探险
- C语言中的函数指针与指针函数(续)
- C# 无法加载C++编译的DLL异常
- C++
- NOI1994 最佳旅游路线 解题报告
- 信号报告-week2-C语言习题集
- C语言指针函数和函数指针详细介绍
- Leetcode 102. Binary Tree Level Order Traversal (Easy) (cpp)
- 时间换算-week2-C语言习题集
- 逆序的三位数-week1-C语言习题集
- LeetCode-难题集之Best_Time_to_Buy_and_Sell_Stock系列
- 值得推荐的C/C++框架和库
- STL"源码"剖析-重点知识总结
- C++ 指针数组与数组指针
- 单链表的排序合并实现