先贴代码, 后写解释
#include <iostream>
#include <vector>
struct Node {
int value;
struct Node* left;
struct Node* right;
};
void z_visit_binary_tree(const Node* root) {
std::vector<const Node*> queue;
queue.push_back(root);
int i = 0;
while (queue.size() > 0) {
i = i % 2;
std::vector<const Node*> buf;
if (i == 0) {
//for (auto it = queue.begin(); it != queue.end(); ++it) {
for (int j = 0; j < queue.size(); ++j) {
if (queue[j]->left != nullptr) {
buf.push_back(queue[j]->left);
}
if (queue[j]->right != nullptr) {
buf.push_back(queue[j]->right);
}
std::cout << queue[j]->value << std::endl;
}
queue.clear();
if (buf.size() > 0) {
queue.insert(queue.end(), buf.begin(), buf.end());
}
} else if (i == 1) {
// for (auto it = queue.end() - 1; it >= queue.begin(); --it) {
for (int j = queue.size() - 1; j >= 0; --j) {
if (queue[j]->right != nullptr) {
buf.insert(buf.begin(), queue[j]->right);
}
if (queue[j]->left != nullptr) {
buf.insert(buf.begin(), queue[j]->left);
}
std::cout << queue[j]->value << std::endl;
}
queue.clear();
if (buf.size() > 0) {
queue.insert(queue.end(), buf.begin(), buf.end());
}
}
i++;
}
}
int main() {
struct Node l1 = {3, nullptr, nullptr};
struct Node r2 = {5, nullptr, nullptr};
Node r3 = {6, nullptr, nullptr};
Node r1 = {7, &r2, &r3};
Node root = {4, &l1, &r1};
z_visit_binary_tree(&root);
}