c++只输出二叉树k层的结点
时间: 2024-09-21 07:13:12 浏览: 49
在C++中,你可以使用深度优先搜索(Depth First Search, DFS)或者广度优先搜索(Breadth First Search, BFS)来遍历并打印出二叉树的第K层节点。这里我们以BFS为例,因为它更适合于层次结构的遍历。
首先,你需要创建一个队列用于存储待处理的节点,并维护当前层数。以下是基本步骤:
1. 定义一个辅助函数`printKLevelUtil(Node* root, int k, vector<int>& nodes)`:
- 如果根节点为空,返回;
- 如果当前层数等于k,将节点值添加到结果vector中,并结束递归;
- 否则,将当前节点入队并增加层数,然后对左子节点和右子节点递归调用该函数。
2. 主函数`void printKLevel(Node* root, int k)`:
- 初始化空的vector`nodes`和队列`queue`,并将根节点入队;
- 当队列不为空且层数小于k时,继续执行:
- 弹出队首节点,如果它是第k层,将其值添加到`nodes`;
- 将它的左右子节点(如果有)加入队列。
```cpp
#include <iostream>
#include <vector>
#include <queue>
// 二叉树节点定义
struct Node {
int data;
Node* left, *right;
};
// 辅助函数,用于递归遍历并输出第K层节点
void printKLevelUtil(Node* root, int k, std::vector<int>& nodes) {
if (!root)
return;
std::queue<Node*> q;
q.push(root);
int level = 0;
while (!q.empty() && level < k) {
Node* node = q.front();
q.pop();
// 如果到达了第k层,记录节点值
if (level == k - 1)
nodes.push_back(node->data);
// 探索下一层节点
if (node->left)
q.push(node->left);
if (node->right)
q.push(node->right);
++level;
}
}
// 打印二叉树的第K层节点
void printKLevel(Node* root, int k) {
std::vector<int> nodes;
printKLevelUtil(root, k, nodes);
// 输出结果
for (const auto& val : nodes)
std::cout << val << " ";
std::cout << std::endl;
}
```
要调用这个函数,传入二叉树的根节点和你想输出的层数即可。
阅读全文