/*方法一:递归后序遍历二叉树。*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
postorder(root, res);
return res;
}
void postorder(TreeNode *root, vector<int> &res){
if(root == nullptr) return;
if(root->left) postorder(root->left, res);
if(root->right) postorder(root->right, res);
res.push_back(root->val);
}
};
/*方法二:利用栈,迭代法后序遍历二叉树*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if(root == nullptr) return res;
stack<TreeNode*> s;
s.push(root);
TreeNode *pre = nullptr;
while(!s.empty()){
if((s.top()->left == nullptr && s.top()->right == nullptr) ||
(pre != nullptr && (pre == s.top()->left || pre == s.top()->right))){
res.push_back(s.top()->val);
pre = s.top();
s.pop();
}
else{
TreeNode *tmp = s.top();
if(tmp->right) s.push(tmp->right);
if(tmp->left) s.push(tmp->left);
}
}
}
};
10-03
10-03