c++基于栈实现非递归的后序遍历算法
时间: 2023-08-05 08:04:08 浏览: 49
非递归的后序遍历算法可以通过栈来实现,具体步骤如下:
1. 创建一个辅助栈和一个指针p,将p指向根节点。
2. 先将p节点入栈,并将p的左子树不断入栈,直到p为空。
3. 取出栈顶节点,判断其是否有右子树或者右子树是否已经被访问过,如果是,则输出该节点,并将该节点的指针p置为null;否则,将该节点重新入栈,并将p指向其右子树。
4. 重复步骤3,直到栈为空。
以下是C++代码实现:
```c++
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void postorderTraversal(TreeNode* root)
{
if (root == nullptr)
return;
stack<TreeNode*> s;
TreeNode* p = root;
TreeNode* lastVisited = nullptr;
while (!s.empty() || p != nullptr)
{
if (p != nullptr)
{
s.push(p);
p = p->left;
}
else
{
TreeNode* topNode = s.top();
if (topNode->right != nullptr && topNode->right != lastVisited)
p = topNode->right;
else
{
cout << topNode->val << " ";
lastVisited = topNode;
s.pop();
}
}
}
}
```
阅读全文