假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法,采用先序遍历方法输出二叉树b中所有结点的层次。 输入 第一行:采用括号表示法的树字符串 输出 采用先序遍历的所有结点的层次
时间: 2024-06-13 21:04:44 浏览: 90
二叉树的层次遍历可以使用队列来实现。具体步骤如下:
1. 创建一个空队列,将根节点入队。
2. 当队列不为空时,执行以下操作:
a. 取出队首元素,输出该元素的值。
b. 如果该元素有左子节点,则将左子节点入队。
c. 如果该元素有右子节点,则将右子节点入队。
3. 重复步骤2,直到队列为空。
在这个基础上,我们可以稍作修改,记录每个节点的层数,从而输出每个节点的层次。具体步骤如下:
1. 创建一个空队列,将根节点和层数0入队。
2. 当队列不为空时,执行以下操作:
a. 取出队首元素,输出该元素的值和层数。
b. 如果该元素有左子节点,则将左子节点和层数加1入队。
c. 如果该元素有右子节点,则将右子节点和层数加1入队。
3. 重复步骤2,直到队列为空。
下面是具体的实现代码:
```
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
void printLevel(TreeNode* root) {
if (root == NULL) {
return;
}
queue<pair<TreeNode*, int>> q;
q.push(make_pair(root, 0));
while (!q.empty()) {
pair<TreeNode*, int> p = q.front();
q.pop();
cout << p.first->val << " " << p.second << endl;
if (p.first->left != NULL) {
q.push(make_pair(p.first->left, p.second + 1));
}
if (p.first->right != NULL) {
q.push(make_pair(p.first->right, p.second + 1));
}
}
}
int main() {
string s;
cin >> s;
// 构建二叉树
// ...
printLevel(root);
return 0;
}
```
阅读全文