给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> v;
if(root == nullptr)
return v;
stack<TreeNode*> s;
TreeNode* p = root;
while(p) //最左边的一列节点
{
s.push(p);
p = p->left;
}
TreeNode* q = nullptr;
while(!s.empty())
{
TreeNode* node = s.top();
if(node->right == q) // 判断当前节点右孩子与之前弹出节点是否相等
{
s.pop();
v.push_back(node->val);
q = node; // 用来标记当前被弹出节点
}
else
{
p = node->right; //当前节点右孩子与之前弹出节点不相等 保存当前节点
while(p)
{
s.push(p); //将当前节点的左孩子入栈
p = p->left;
}
q = nullptr; //压栈后将节点置空
}
}
return v;
}
};