【树】leetcode_145_ 二叉树的后序遍历
c++递归
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> re;
get_re(root, re);
return re;
}
void get_re(TreeNode *root, vector<int> &re){
if(root==nullptr){
return;
}
get_re(root->left, re);
get_re(root->right, re);
re.push_back(root->val);
}
};
迭代(把先序的《中左右》变成《中右左》,然后翻转就是后序的《左右中》)
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> re;
while(root != nullptr || !re.empty()){
while(root != nullptr){
result.push_back(root->val);
re.push(root);
root = root->right;
}
root = re.top();
re.pop();
root = root->left;
}
reverse(result.begin(),result.end());
return result;
}
};