用c加加写一个后序遍历删除二叉树的非递归写法
时间: 2024-02-11 17:04:13 浏览: 58
自己编写的实验二叉树的后序遍历非递归算法c语言实现
5星 · 资源好评率100%
好的,以下是用 C++ 实现后序遍历删除二叉树的非递归写法示例代码:
```c++
#include <iostream>
#include <stack>
using namespace std;
struct Node {
int val;
Node* left;
Node* right;
Node(int v) : val(v), left(nullptr), right(nullptr) {}
};
void postorderDelete(Node* root) {
stack<Node*> s1, s2;
s1.push(root);
while (!s1.empty()) {
Node* 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()) {
Node* node = s2.top();
s2.pop();
delete node;
}
}
int main() {
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
root->left->left = new Node(4);
root->left->right = new Node(5);
root->right->left = new Node(6);
root->right->right = new Node(7);
postorderDelete(root);
root = nullptr;
return 0;
}
```
在这个示例中,我们使用了两个栈 `s1` 和 `s2`。首先将根节点入栈 `s1` 中,然后循环遍历 `s1`,将弹出的节点入栈 `s2` 中,并将其左右子节点入栈 `s1` 中,直到 `s1` 为空。最后遍历 `s2` 中的节点,依次删除即可。
需要注意的是,在删除根节点后,一定要将根节点的指针设为 `nullptr`,防止出现野指针。
阅读全文