后序释放的先后顺序
运行下面这段程序:
#include <iostream>
#include <queue>
#include <string>
#include <vector>
using namespace std;
struct TNode {
string name;
TNode* left = nullptr;
TNode* right = nullptr;
};
int alive = 0; // 还没归还的节点数
TNode* make(const string& name) {
alive++;
return new TNode{name};
}
TNode* build() {
TNode* root = make("总部");
root->left = make("华北");
root->right = make("华南");
root->left->left = make("北京");
root->left->right = make("天津");
root->right->right = make("广州");
return root;
}
vector<string> order;
void free_tree(TNode* t) {
if (t == nullptr) return;
free_tree(t->left);
free_tree(t->right);
order.push_back(t->name);
delete t;
}
int main() {
free_tree(build());
for (size_t i = 0; i < order.size(); i++) cout << (i ? "-" : "") << order[i];
cout << endl;
}
(本题用 g++ -std=c++17 -O0 编译。)
全部评论