思路:
第一个还是简单的递归版本. 第二个是iterative版本. 第二个就是做一个反向preorder遍历, 然后再逆转结果表即可.
void helper(vector<int>& res, TreeNode* root) {
if (! root) return;
helper(res, root->left);
helper(res, root->right);
res.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
helper(res, root);
return res;
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if (! root) return res;
stack<TreeNode*> stk;
stk.push(root);
while (! stk.empty()) {
TreeNode* cur = stk.top();
stk.pop();
res.push_back(root->val);
if (root->left)
stk.push(root->left);
if (root->right)
stk.push(root->right);
}
reverse(res.begin(), res.end());
return res;
}