二叉树非递归后序遍历利用两个栈思想
时间: 2023-06-28 11:07:07 浏览: 104
非递归后序遍历二叉树需要用到两个栈,具体思路如下:
1. 定义两个栈s1和s2;
2. 将根节点压入栈s1中;
3. 循环执行以下操作,直到栈s1为空:
1) 弹出栈s1的栈顶元素,并将该元素压入栈s2中;
2) 如果该元素有左子节点,则将左子节点压入栈s1中;
3) 如果该元素有右子节点,则将右子节点压入栈s1中;
4. 循环结束后,栈s2中存储的就是后序遍历的结果。
代码实现如下:
```
void postOrderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
stack<TreeNode*> s1, s2;
s1.push(root);
while (!s1.empty()) {
TreeNode* node = s1.top();
s1.pop();
s2.push(node);
if (node->left != nullptr) {
s1.push(node->left);
}
if (node->right != nullptr) {
s1.push(node->right);
}
}
while (!s2.empty()) {
TreeNode* node = s2.top();
s2.pop();
cout << node->val << " ";
}
}
```
阅读全文