Binary Tree Postorder Traversal
递归方法:
class Solution { public: void _postorderTraversal(TreeNode* root,vector<int>& postorder) { if(root) { _postorderTraversal(root->left,postorder); _postorderTraversal(root->right,postorder); postorder.push_back(root->val); } } vector<int> postorderTraversal(TreeNode* root) { vector<int> postorder; _postorderTraversal(root,postorder); return postorder; } };
非递归:
class Solution { public: vector<int> postorderTraversal(TreeNode* root) { vector<int> postorder; if(!root) return postorder; stack<pair<TreeNode*,int>> s; s.push(make_pair(root,0)); while(!s.empty()) { TreeNode* p=s.top().first; int time=s.top().second; s.pop(); if(!time) { s.push(make_pair(p,1)); if(p->right) s.push(make_pair(p->right,0)); if(p->left) s.push(make_pair(p->left,0)); } else postorder.push_back(p->val); } return postorder; } };