请给出二叉树后续遍历非递归算法的c++完整代码
时间: 2023-06-26 08:07:59 浏览: 113
当然,以下是二叉树后续遍历的非递归算法的C++完整代码:
```c++
#include <stack>
#include <vector>
using namespace std;
// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
if (!root) {
return res;
}
stack<TreeNode*> s;
TreeNode* last_visited = NULL;
while (root || !s.empty()) {
while (root) {
s.push(root);
root = root->left;
}
root = s.top();
if (!root->right || root->right == last_visited) {
res.push_back(root->val);
s.pop();
last_visited = root;
root = NULL; // 这里需要将 root 置空,否则会重复 push 进栈中
} else {
root = root->right;
}
}
return res;
}
};
```
这里使用了一个栈来模拟递归的过程。首先将根节点入栈,然后将根节点的左子树全部入栈,直到左子树为空。此时,从栈中弹出栈顶元素,如果其右子树为空或已经被访问过,则访问该节点,并将其标记为已访问过,否则将其右子树入栈。重复以上步骤直到栈为空。
阅读全文