给定一个二叉树,返回它的 后序 遍历。
还是同样的配方,我将给出它的递归写法和非递归写法
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
if(root)
{
PosTree(root, result);
}
return result;
}
private:
void PosTree(TreeNode* root, vector<int>& v)
{
if(root)
{
PosTree(root->left, v);
PosTree(root->right, v);
v.push_back(root->val);
}
}
};
非递归写法
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
if(root == nullptr)
return result;
stack<TreeNode*> Sta1,Sta2;
Sta1.push(root);
TreeNode* temp;
while(!Sta1.empty())
{
temp = Sta1.top();
Sta1.pop();
Sta2.push(temp);
if(temp->left != nullptr)
{
Sta1.push(temp->left);
}
if(temp->right != nullptr)
{
Sta1.push(temp->right);
}
}
while(!Sta2.empty())
{
result.push_back(Sta2.top()->val);
Sta2.pop();
}
return result;
}
};