链接:https://oj.leetcode.com/problems/binary-tree-postorder-traversal/
描述:
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [3,2,1]
.
Note: Recursive solution is trivial, could you do it iteratively?
递归 很简单。Accept
代码如下:
void postOrderTraverseR(TreeNode* root, vector<int> &result)
{
if(root)
{
postOrderTraverseR(root->left, result);
postOrderTraverseR(root->right, result);
result.push_back(root->val);
}
}
方法2:
非递归 借助栈实现。
我们通过观察可以发现通过调整入栈策略,出栈的顺序刚好是后续便利的逆序。
代码如下:
void postOrderTraverse(TreeNode*root, vector<int> &result)
{
if(root == NULL) return;
std::stack<TreeNode*> st;
st.push(root);
while( !st.empty())
{
TreeNode* root = st.top();
st.pop();
result.insert(result.begin(), root->val);
if(root->left) st.push(root->left);
if(root->right) st.push(root->right);
}
}