后序遍历二叉树非递归
时间: 2024-06-13 14:09:23 浏览: 176
下面是后序遍历二叉树的非递归算法,使用了栈来实现:
1. 定义一个栈stack和一个指针p,初始时p指向根节点。
2. 将p入栈,并将p指向其左子节点,重复此步骤直到p为空。
3. 取出栈顶元素,如果其右子节点存在且未被访问过,则将p指向其右子节点,并将该节点入栈,重复步骤2直到p为空。
4. 如果栈顶元素的右子节点不存在或已被访问过,则访问该节点,并将其出栈。
5. 重复步骤3和4直到栈为空。
下面是C++代码实现:
```cpp
void postorderTraversal(TreeNode* root) {
if (!root) {
return;
}
stack<TreeNode*> s;
TreeNode* p = root;
TreeNode* lastVisited = nullptr;
while (p || !s.empty()) {
while (p) {
s.push(p);
p = p->left;
}
TreeNode* topNode = s.top();
if (topNode->right && topNode->right != lastVisited) {
p = topNode->right;
} else {
cout << topNode->val << " ";
s.pop();
lastVisited = topNode;
}
}
}
```
阅读全文