二叉树的层序遍历c++,由用户输入二叉树
时间: 2024-08-13 21:00:18 浏览: 89
二叉树层序遍历-实现代码-队列
层序遍历(Breadth-First Search, BFS)是一种按照二叉树的层次顺序来访问节点的算法。在C++中,如果你要让用户输入二叉树并进行层序遍历,可以使用队列数据结构来辅助。以下是一个简单的步骤:
1. 定义一个二叉树节点结构(TreeNode),包含值和左右子节点指针。
2. 创建一个函数用于获取用户输入的二叉树,通常会先输入根节点的值,然后递归地输入子节点。
3. 定义一个队列来存储待访问的节点,并将根节点放入。
4. 使用一个while循环,当队列不为空时,执行以下操作:
a. 弹出队首元素,并打印其值。
b. 将该节点的左子节点和右子节点(如果存在)依次加入队列。
5. 循环结束,遍历过程完成。
以下是一个简单的C++代码示例,假设你已经有了一个`TreeNode`类:
```cpp
#include <iostream>
#include <queue>
using namespace std;
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 获取用户输入的二叉树
TreeNode* buildTree(int arr[], int start, int end) {
if (start > end)
return nullptr;
int mid = (start + end) / 2;
TreeNode* root = new TreeNode(arr[mid]);
root->left = buildTree(arr, start, mid - 1);
root->right = buildTree(arr, mid + 1, end);
return root;
}
// 层序遍历
void levelOrder(TreeNode* root) {
if (root == nullptr) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
cout << node->val << " ";
q.pop();
// 左右子节点入队
if (node->left != nullptr) q.push(node->left);
if (node->right != nullptr) q.push(node->right);
}
}
int main() {
int n;
cout << "Enter the number of nodes: ";
cin >> n;
int arr[n];
cout << "Enter values of nodes in level order: ";
for (int i = 0; i < n; ++i)
cin >> arr[i];
TreeNode* root = buildTree(arr, 0, n - 1);
cout << "Layer order traversal: ";
levelOrder(root);
return 0;
}
```
阅读全文