DFS&Iteration Binary Tree Postorder Traversal
2015-05-30 21:45
393 查看
思路:
二叉树的后序遍历。
方法一:DFS。
方法二:迭代。
时间复杂度O(N),空间复杂度O(N)。
方法三:
二叉树的后序遍历。
方法一:DFS。
/** * 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 { private: void dfs(vector<int> &ans, TreeNode* node) { if(node == nullptr) return; if(node->left != nullptr) { dfs(ans, node->left); } if(node->right != nullptr) { dfs(ans, node->right); } ans.push_back(node->val); } public: vector<int> postorderTraversal(TreeNode* root) { vector<int> ans; dfs(ans, root); return ans; } };
方法二:迭代。
时间复杂度O(N),空间复杂度O(N)。
/** * 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> postorderTraversal(TreeNode* root) { vector<int> ans; TreeNode *p, *q; stack<TreeNode*> s; p = root; do { while(p != nullptr) { s.push(p); p = p->left; } q = nullptr; while(!s.empty()) { p = s.top(); s.pop(); if(p->right == q) { ans.push_back(p->val); q = p; }else { s.push(p); p = p->right; break; } } }while(!s.empty()); return ans; } };
方法三:
相关文章推荐
- HDU--3333(树状数组+离线处理)
- [Swust OJ 1139]--Coin-row problem
- Joel 技术分享心得
- 【PS后期】一个蛋糕的故事
- Android 中双击退出
- Android 记录2 对于Android事件分发的理解
- JavaScript 开发的45个经典技巧
- 【末世旅行之C++】C++中的虚函数和纯虚函数的理解
- iOS layoutSubviews视图重绘总结
- 编程之美第二题 找连续数
- 观察者模式
- 设计模式——外观模式
- spring 中 applicationEvent的使用
- openlayers实现wfs属性查询和空间查询
- openlayers实现wfs属性查询和空间查询
- PHP Cookies
- PHP Cookies
- slf4j使用
- MZOI-一个人的旅行
- linux下source insight