c++输出二叉树k层的结点
时间: 2024-09-21 20:12:59 浏览: 36
在C++中,遍历并输出二叉树的第k层结点通常可以使用层次遍历(也叫广度优先搜索,BFS),因为层次遍历按照节点在树中的层级顺序逐层访问。以下是一个基本的递归队列方法来解决这个问题:
```cpp
#include <iostream>
#include <queue>
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void printKthLevel(TreeNode* root, int k) {
if (root == nullptr || k <= 0) return; // 如果根为空或层数小于等于0,直接返回
std::queue<TreeNode*> q; // 队列用于存储每一层的节点
q.push(root);
for (int i = 1; i <= k; ++i) {
while (!q.empty()) {
int size = q.size(); // 当前层的节点数量
for (int j = 0; j < size; ++j) {
TreeNode* node = q.front();
q.pop();
std::cout << node->val << " "; // 输出节点值
if (node->left) q.push(node->left); // 将左子节点加入队列
if (node->right) q.push(node->right); // 将右子节点加入队列
}
std::cout << "\n"; // 每一层结束后换行
}
}
}
// 示例使用
int main() {
TreeNode* root = new TreeNode(1);
// 构造你的二叉树...
int k = 2; // 要打印的层数
printKthLevel(root, k);
return 0;
}
```
在这个示例中,`printKthLevel`函数接收二叉树的根节点和层数k作为输入。它首先检查是否合法,然后创建一个队列,将根节点放入队列。接着进入一个循环,直到层数k遍历完毕。在每层的循环内部,先获取该层所有节点的数量,并依次处理每个节点,将其值输出,同时将其左右子节点加入队列。当一层的所有节点都处理完后,换行开始下一层。