用C++实现给定一个字符序列,请按照先序遍历的顺序构建对应的二叉树,其中‘#’表示空。然后输出二叉树的后序遍历序列 输入格式: 一个正整数N(N<1000),N个字符序列。 输出格式: N个字符序列(第i个字符序列为输入的第i个字符序列构建的二叉树的后序遍历序列)
时间: 2023-07-24 13:13:59 浏览: 78
好的,这是完整的 C++ 代码实现:
```c++
#include <iostream>
#include <string>
#include <stack>
#include <vector>
using namespace std;
struct TreeNode{
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
// 根据先序遍历构建二叉树
TreeNode* buildTree(string& s){
if(s.empty()) return NULL;
char c = s[0];
s.erase(0,1);
if(c == '#') return NULL;
TreeNode* root = new TreeNode(c);
root->left = buildTree(s);
root->right = buildTree(s);
return root;
}
// 后序遍历二叉树
void postorderTraversal(TreeNode* root, vector<char>& res){
if(root == NULL) return;
postorderTraversal(root->left, res);
postorderTraversal(root->right, res);
res.push_back(root->val);
}
int main(){
int n;
cin >> n;
while(n--){
string s;
cin >> s;
TreeNode* root = buildTree(s);
vector<char> res;
postorderTraversal(root, res);
for(auto ch : res){
cout << ch;
}
cout << endl;
}
return 0;
}
```
注意,此代码实现中的二叉树遍历采用了递归的方式,也可以采用非递归的方式进行实现。
阅读全文