后序遍历非递归算法c++的代码
时间: 2023-10-20 18:10:28 浏览: 92
以下是后序遍历的非递归算法C++代码:
```c++
void postorderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
stack<TreeNode*> s;
TreeNode* lastVisited = nullptr;
while (root != nullptr || !s.empty()) {
while (root != nullptr) {
s.push(root);
root = root->left;
}
TreeNode* topNode = s.top();
if (topNode->right == nullptr || topNode->right == lastVisited) {
cout << topNode->val << " "; // 访问节点
lastVisited = topNode;
s.pop();
} else {
root = topNode->right;
}
}
}
```
该算法使用了一个栈来模拟递归过程,我们从根节点开始,一直往左走并将遇到的节点都入栈,直到遇到叶子节点为止。然后,我们从栈中取出栈顶节点,判断其右子节点是否已经被访问过,如果没有,则将其右子节点入栈并继续往左走;如果已经访问过,则说明该节点的左右子节点都已经访问过了,此时我们可以访问该节点并将其从栈中弹出。重复上述过程,直到栈为空为止。
阅读全文