递归和非递归。
递归:简单。
/**
* 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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
v.clear();
dfs(root);
return v;
}
void dfs(TreeNode *root){
if(root == NULL)
return ;
dfs(root->left);
dfs(root->right);
v.push_back(root->val);
}
vector<int> v;
};
非递归:我的方法是用两个栈,一个栈s用来遍历节点,另一个栈t用来存节点。最后将栈t的节点pop出来放到vector里面。
/**
* 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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
stack<TreeNode*> s, t;
vector<int> v;
if(root == NULL) return v;
t.push(root);
TreeNode *tmp;
while(!t.empty()){
tmp = t.top();
s.push(tmp);
t.pop();
if(tmp->left != NULL)
t.push(tmp->left);
if(tmp->right != NULL)
t.push(tmp->right);
}
vector<int> ans;
while(!s.empty()){
ans.push_back(s.top()->val);
s.pop();
}
return ans;
}
};