题目描述:
这题紧接着144题,二叉树后序遍历的非递归
思路:利用前一个访问的元素和当前栈顶元素的关系,如果是当前栈顶元素的左儿子或者右儿子为前一个访问的元素,则表示当前元素的左右子树均被访问过了,否则将当前节点左右子树压栈
代码如下(c++)版本:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
deque<TreeNode*> stack;
if(root!=NULL)
stack.push_back(root);
TreeNode*pre = NULL;
vector<int> res;
while (!stack.empty()) {
TreeNode* now = stack.back();
stack.pop_back();
if ((now->left == NULL) && (now->right == NULL) ||
((pre != NULL) && (now->left == pre || now->right == pre))) {
res.push_back(now->val);
pre = now;
}
else {
stack.push_back(now);
if (now->right != NULL)
stack.push_back(now->right);
if (now->left != NULL)
stack.push_back(now->left);
}
}
return res;
}
};