二叉树非递归后序遍历
二叉树非递归后序遍历
vector<int> post_order(TreeNode* root)
{
stack<TreeNode*> stack;
vector<int> res;
if(root == nullptr)
return res;
TreeNode* prev = nullptr;
TreeNode* curt = nullptr;
stack.push(root);
while(!stack.empty())
{
curt = stack.top();
if(prev == nullptr || prev->left == curt || prev->right == curt)
{
if(curt->left != nullptr)
stack.push(curt->left);
else if(curt->right != nullptr)
stack.push(curt->right);
else{
stack.pop();
res.push_back(curt->val);
}
} else if(curt->left == prev)
{
if(curt->right != nullptr)
stack.push(curt->right);
else{
stack.pop();
res.push_back(curt->val);
}
}else {
res.push_back(curt->val);
stack.pop();
}
prev = curt;
}
return res;
}

浙公网安备 33010602011771号