题目:
用迭代法写出二叉树的后序遍历
方法:
后续遍历的顺序是左右中,反过来就是中右左,我们会发现和前序遍历只差一个左右的顺序,而我们在前面前序遍历时会发现左右的顺序是不影响的,我们只需要把左右孩子结点顺序交换一下即可。
题解:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if(root == NULL) return result;
st.push(root);
while(!st.empty()){
TreeNode* node = st.top();
st.pop();
result.push_back(node->val);
if(node->left) st.push(node->left); //左先进后出
if(node->right) st.push(node->right); //右后进先出
}
reverse(result.begin(),result.end()); //最后逆置 变成左右中
return result;
}
};