問題描述:
給定一個二叉樹,返回它的後序遍歷。
問題分析:
這個與二叉樹的前序遍歷一樣,但是順序要改爲左->右->頭節點的順序。
這裏我們採用迭代算法來求解。主要是採用數據結構中的“棧”的思想。具體的操作如下:
我們先將根節點入棧,然後進行如下循環:
(1)查看棧頂元素top,
(2)如果top有左節點,則把左節點入棧;
(3)如果top沒有左節點,則把右節點入棧‘
(4)如果左右節點都不存在,就將該top節點輸出,並且彈出棧。
爲了防止出現死循環,我們需要在top左(或者右)節點入棧之後,將其設置爲nullptr。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> ans;
if(root==nullptr) return res;
ans.push(root);
TreeNode *tmp;
ans.push(root);
while(ans.size()>0)
{
tmp = ans.top();
if(tmp->left!=nullptr)
{
ans.push(tmp->left);
tmp->left = nullptr;
}
else if(tmp->right!=nullptr)
{
ans.push(tmp->right);
tmp->right = nullptr;
}
else
{
res.push_back(tmp->val);
ans.pop();
}
}
res.pop_back();
return res;
}
};