按层次遍历二叉树
以字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据。
输入格式:
字符串形式的先序序列(即结点的数据类型为单个字符)
输出格式:
按层次遍历二叉树的结果
输入样例:
在这里给出一组输入。例如:
ABDG##HI####CE#J##F##
输出样例:
在这里给出相应的输出。例如:
ABCDEFGHJI
这题用C或者C++怎么做 为了实现这个问题,我们需要执行两个主要步骤:首先根据给定的先序序列构建二叉树,然后对构建的二叉树进行层次遍历。下面是一个用C++实现这个过程的简单代码示例。
#include <iostream>
#include <queue>
#include <string>
using namespace std;
// 定义二叉树节点
struct TreeNode {
char data;
TreeNode* left;
TreeNode* right;
TreeNode(char val) : data(val), left(nullptr), right(nullptr) {}
};
// 根据先序序列构建二叉树
TreeNode* buildTree(const string& preorder, int& index) {
if (index >= preorder.length() || preorder == '#') {
index++;
return nullptr;
}
TreeNode* root = new TreeNode(preorder);
root->left = buildTree(preorder, index);
root->right = buildTree(preorder, index);
return root;
}
// 层次遍历二叉树
void levelOrderTraversal(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* current = q.front();
q.pop();
cout << current->data;
if (current->left) {
q.push(current->left);
}
if (current->right) {
q.push(current->right);
}
}
}
int main() {
string preorder;
cin >> preorder;// 输入二叉树的先序序列
// 初始化索引,用于构建二叉树
int index = 0;
TreeNode* root = buildTree(preorder, index);
// 层次遍历
levelOrderTraversal(root);
return 0;
}
### 代码解析:
1. **TreeNode 结构体**:定义二叉树节点,包含节点数据和左右子节点指针。
2. **buildTree 函数**:递归地根据先序序列构建二叉树。如果当前字符是 `#`,表示为空;否则创建节点,并递归构建左右子树。
3. **levelOrderTraversal 函数**:使用队列实现层次遍历(广度优先遍历)。从根节点开始,依次访问节点的左、右子节点。
4. **主函数**:读取输入的先序序列,调用 `buildTree` 构建二叉树,最后调用 `levelOrderTraversal` 输出按层次遍历结果。
使用该程序可以解析给定的二叉树先序序列,并按要求输出层次遍历的结果。输入样例和输出遵循题目要求。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]