解释代码void levelOrderTraversal(Node* root) { if (root == NULL) { return; } Node* queue[100]; int front = -1, rear = -1; queue[++rear] = root; while (front != rear) { Node* temp = queue[++front]; printf("%c ", temp->data); if (temp->left != NULL) { queue[++rear] = temp->left; } if (temp->right != NULL) { queue[++rear] = temp->right; } } }
时间: 2024-04-13 15:28:09 浏览: 19
这代码实现了一个层序遍历函数 `levelOrderTraversal`,用于按照层序遍历的顺序打印二叉树的节点值。
函数接受一个指向根节点的指针 `root`,并通过队列实现层序遍历。
下面是对该函数的逐行解释:
1. `if (root == NULL) { return; }`:首先进行判断,如果根节点为空,则直接返回,表示当前二叉树为空。
2. `Node* queue[100];`:定义一个大小为 100 的数组 `queue`,用于存储待遍历的节点。
3. `int front = -1, rear = -1;`:定义两个变量 `front` 和 `rear`,分别表示队列的前端和后端的索引。
4. `queue[++rear] = root;`:将根节点入队,即将根节点放入队列的后端,并将 `rear` 自增。
5. `while (front != rear) { ... }`:使用循环进行遍历,直到队列为空,即前端等于后端时结束循环。
6. `Node* temp = queue[++front];`:从队列的前端取出一个节点,并将 `front` 自增。
7. `printf("%c ", temp->data);`:打印当前节点的值。这里使用 `%c` 格式说明符来打印字符类型的数据,`temp->data` 表示当前节点的数据值。
8. `if (temp->left != NULL) { queue[++rear] = temp->left; }`:如果当前节点存在左子节点,将其入队,即将左子节点放入队列的后端,并将 `rear` 自增。
9. `if (temp->right != NULL) { queue[++rear] = temp->right; }`:如果当前节点存在右子节点,将其入队,即将右子节点放入队列的后端,并将 `rear` 自增。
通过循环遍历,每次从队列中取出一个节点并打印其值,然后将该节点的左子节点和右子节点依次入队,实现了层序遍历的效果。
例如,给定以下二叉树:
```
A
/ \
B C
/ \ \
D E F
```
调用 `levelOrderTraversal` 函数,并传入根节点指针,将按照层序遍历的顺序输出节点值:A B C D E F。
希望以上解释能够帮助到你!如果还有其他问题,请随时提问。