原题地址(中等)
方法1—递归
思路
代码
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> v;
dfs(root, v);
return v;
}
void dfs(TreeNode* root, vector<int>& v) {
if(!root) return;
dfs(root->left, v);
dfs(root->right, v);
v.push_back(root->val);
}
};
方法2—栈模拟递归
思路
没啥好说的,记住就好了,中序先序后序的非递归遍历,考研学过的。
代码
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> stk;
TreeNode* pre = NULL;
while(!stk.empty() || root) {
while(root){
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
if(!root->right || root->right == pre) {
ans.push_back(root->val);
pre = root;
root = NULL;
}
else{
stk.push(root);
root = root->right;
}
}
return ans;
}
};