QUESTION
hard
题目描述
给定一个二叉树,返回它的后序遍历
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
说明
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
SOLUTION
- 各种树的各种遍历的递归方法你应该很熟练
方法一(递归)
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
helper(root, res);
return res;
}
void helper(TreeNode* node, vector<int> &res){
if(!node) return;
helper(node->left, res);
helper(node->right, res);
res.push_back(node->val);
}
方法二(迭代)
这个方法注意入栈是顺序入栈,最后将结果反序得到正确答案
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if(!root) return res;
stack<TreeNode*> s;
s.push(root);
TreeNode* p = NULL;
while(!s.empty()){
p = s.top();
s.pop();
res.push_back(p->val);
if(p->left) s.push(p->left);
if(p->right) s.push(p->right);
}
reverse(res.begin(), res.end());
return res;
}