用c++实现拓展先序遍历(结点用小写字母,叶子用大写字母表示)还原二叉树,再层次遍历输出
时间: 2024-02-21 10:02:07 浏览: 60
二叉树的先序、中序、后序、分层遍历C++实现
4星 · 用户满意度95%
好的,我们可以先按照上面的方法用 C++ 实现拓展先序遍历还原二叉树,然后再对其进行层次遍历输出。具体实现代码如下:
```c++
#include <iostream>
#include <string>
#include <queue>
using namespace std;
struct Node {
char val;
Node* left;
Node* right;
Node(char v) : val(v), left(nullptr), right(nullptr) {}
};
Node* buildTree(string& s, int& i) {
if (i >= s.length()) {
return nullptr;
}
char c = s[i++];
if (c >= 'A' && c <= 'Z') {
return new Node(c);
}
Node* root = new Node(c);
root->left = buildTree(s, i);
root->right = buildTree(s, i);
return root;
}
void levelTraversal(Node* root) {
if (root == nullptr) {
return;
}
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* cur = q.front();
q.pop();
cout << cur->val << " ";
if (cur->left != nullptr) {
q.push(cur->left);
}
if (cur->right != nullptr) {
q.push(cur->right);
}
}
}
int main() {
string s = "aBDEFGhi#j#k#Cl#mno#p#";
int i = 0;
Node* root = buildTree(s, i);
levelTraversal(root); // 输出 a B C D E F G h i j k l m n o p
return 0;
}
```
在上述代码中,我们首先按照上面的方法定义了 `buildTree` 函数来构建二叉树。然后,我们定义了一个 `levelTraversal` 函数来进行层次遍历,输入参数为二叉树的根节点指针 `root`,输出结果为按照层次遍历顺序输出的节点值。具体来说,我们使用一个队列来辅助进行层次遍历。首先将根节点入队,然后每次从队列中取出一个节点,并输出其值,将其非空的左右子节点依次入队。直到队列为空为止。最后,在 `main` 函数中调用 `buildTree` 函数构建二叉树,并使用 `levelTraversal` 函数层次遍历输出结果。
希望这个例子能够帮助你理解如何用 C++ 实现拓展先序遍历还原二叉树,并进行层次遍历。
阅读全文