題目
給定一個二叉樹,返回它的 後序 遍歷。
示例:
輸入: [1,null,2,3]
1
2
/
3
輸出: [3,2,1]
來源:力扣(LeetCode)
思路
後序遍歷的順序是左-右-根;
首先,先將先序遍歷的根-左-右順序變爲根-右-左,再翻轉變爲後序遍歷的左-右-根,翻轉還是改變結果 res 的加入順序,然後把更新輔助結點p的左右順序換一下即可。
C++代碼
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root)
{
vector<int> res;
stack<TreeNode*> s;
TreeNode *p = root;
while (!s.empty() || p)
{
if (p)
{
s.push(p);
res.insert(res.begin(), p->val);
p = p->right;
}
else
{
TreeNode *t = s.top();
s.pop();
p = t->left;
}
}
return res;
}
};