用C++语言实现之字层序遍历二叉树 要求尽可能多的中文注释
时间: 2024-02-24 16:57:16 浏览: 81
好的,下面是用C++语言实现之字层序遍历二叉树的代码,注释在代码中:
```cpp
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
// 定义二叉树节点结构体
struct Node {
int val;
Node* left;
Node* right;
Node(int x) : val(x), left(NULL), right(NULL) {}
};
void zigzagLevelOrder(Node* root) {
if (root == NULL) return; // 如果根节点为空,直接返回
queue<Node*> q; // 使用队列来进行层序遍历
q.push(root); // 将根节点入队
int level = 0; // 定义层数,用于判断是否需要翻转
while (!q.empty()) { // 队列不为空时循环
int size = q.size(); // 获取当前层的节点数
stack<int> s; // 使用栈来进行翻转
for (int i = 0; i < size; i++) { // 遍历当前层的节点
Node* node = q.front(); // 取出队头节点
q.pop(); // 将队头节点出队
if (level % 2 == 0) { // 判断是否需要翻转
cout << node->val << " "; // 不需要翻转,直接输出
} else {
s.push(node->val); // 需要翻转,将节点值入栈
}
if (node->left != NULL) q.push(node->left); // 如果有左子节点,将其入队
if (node->right != NULL) q.push(node->right); // 如果有右子节点,将其入队
}
if (level % 2 == 1) { // 如果需要翻转
while (!s.empty()) { // 将栈中的节点值依次输出
cout << s.top() << " ";
s.pop();
}
}
level++; // 层数加一
}
}
int main() {
/*
构建以下二叉树:
3
/ \
9 20
/ \
15 7
*/
Node* root = new Node(3);
root->left = new Node(9);
root->right = new Node(20);
root->right->left = new Node(15);
root->right->right = new Node(7);
cout << "之字层序遍历结果:" << endl;
zigzagLevelOrder(root);
return 0;
}
```
以上就是用C++语言实现之字层序遍历二叉树的代码,注释尽可能详细,希望能够帮助到你!
阅读全文