1.145. 二叉树的后序遍历 - 力扣(LeetCode)
2.思路:设置一个前驱节点,第一层循环采用传统判断条件,第二层只入栈,当栈顶元素的右子树不存在或者已经遍历的情况下,出栈,赋值,将前驱指针设置为该元素,其他情况下,遍历栈顶元素的右子树
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int>data;
TreeNode*prev=nullptr;
TreeNode*cur=root;
stack<TreeNode*>st;
while(cur||!st.empty())
{
while(cur)
{
st.push(cur);
cur=cur->left;
}
TreeNode*top=st.top();
if(top->right==nullptr||top->right==prev)
{
st.pop();
data.push_back(top->val);
prev=top;
}
else
{
cur=top->right;
}
}
return data;
}
};