LeetCode OJ:Binary Tree Postorder Traversal
来源:互联网 发布:淘宝国际转运怎么开通 编辑:程序博客网 时间:2024/04/30 02:32
Binary Tree Postorder Traversal
Total Accepted: 6036 Total Submissions: 20134My SubmissionsGiven 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]
.
Note: Recursive solution is trivial, could you do it iteratively?
利用栈来储存走过的各点,到叶子节点时返回,图中还需记录哪些节点是已经访问过的
/** * 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>postorderTraversal(TreeNode *root){vector<int> save;vector<TreeNode *> dot;if(root==NULL)return save;stack<TreeNode *> s;s.push(root);dot.push_back(root);while(!s.empty()){TreeNode *p=s.top();if((p->left==NULL||isExist(dot,p->left))&&(p->right==NULL||isExist(dot,p->right))){save.push_back(p->val);dot.push_back(p);s.pop();continue;}if(p->left==NULL||isExist(dot,p->left)){s.push(p->right);continue;}s.push(p->left);}return save;}bool isExist(vector<TreeNode *> dot,TreeNode *t){for(int i=0;i<dot.size();i++){if(dot[i]==t)return true;}return false;}};
另一种栈实现
/** * 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> postorderTraversal(TreeNode *root) { vector<int> result; TreeNode *p,*q; stack<TreeNode *> stk; p=root; do{ while(p){ stk.push(p); p=p->left; } q=NULL; while(!stk.empty()){ p=stk.top(); stk.pop(); if(p->right==q){ result.push_back(p->val); q=p; }else{ stk.push(p); p=p->right; break; } } }while(!stk.empty()); return result; }};
/** * 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> postorderTraversal(TreeNode *root) { vector<int> result; TreeNode dummy(-1); TreeNode *cur,*prev=NULL; function<void(const TreeNode*)> visit= [&result](const TreeNode *node){ result.push_back(node->val); }; dummy.left=root; cur=&dummy; while(cur){ if(cur->left==NULL){ prev=cur; cur=cur->right; }else{ TreeNode *left=cur->left; while(left->right&&left->right!=cur) left=left->right; if(left->right==NULL){ left->right=cur; prev=cur; cur=cur->left; }else { visit_reverse(cur->left,prev,visit); prev->right=NULL; prev=cur; cur=cur->right; } } } return result; }private: static void reverse(TreeNode *from,TreeNode *to){ TreeNode *x= from,*y = from->right,*z; if(from == to)return; while(x!=to){ z=y->right; y->right=x; x=y; y=z; } } static void visit_reverse(TreeNode *from,TreeNode *to, function<void(const TreeNode*)>& visit){ TreeNode *p=to; reverse(from,to); while(true){ visit(p); if(p==from)break; p=p->right; } reverse(to,from); }};
0 0
- LeetCode OJ:Binary Tree Postorder Traversal
- LeetCode OJ: Binary Tree Postorder Traversal
- LeetCode OJ - Binary Tree Postorder Traversal
- [LeetCode OJ]Binary Tree Postorder Traversal
- LeetCode OJ Binary Tree Postorder Traversal
- LeetCode OJ:Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode OJ --问题与解答 Binary Tree Postorder Traversal
- leetcode OJ -Binary Tree Postorder Traversal(2014.1.20)
- [LeetCode OJ] Binary Tree Postorder Traversal 解题报告
- LeetCode OJ Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- [LeetCode] Binary Tree Postorder Traversal
- eclipse maven plugin 插件 安装 和 配置
- hive-0.7.1-cdh3u6安装
- TCP/IP socket programming in C(一)
- Erlang基础 - 变量的语法与赋值
- myeclipse 自动退出
- LeetCode OJ:Binary Tree Postorder Traversal
- 有关电源的一些探讨--群内交流笔记
- Personal Wiki
- LA 3938 "Ray, Pass me the dishes!" / 线段树单点更新
- Oracle 启动监听命令
- 导航引擎结构分析之三
- java自学笔记之网络编程
- 朴素贝叶斯分类的原理与流程
- DLL的Dllmain函数讲解