题目描述
给定一棵二叉树的扩展后序序列,试构造这个二叉树,并输出这个二叉树的前序遍历结果。
输入
一行字符,即扩展后序序列,字符只包含小写字母和“.”,长度不超过255
输出
输出对应的前序遍历结果。
样例输入
..a..bc.d
样例输出
dcab
提示
https://neooj.com:8082/oldoj/upload/images/202304/%E4%BA%8C%E5%8F%89%E6%A0%91.jpg
做OJ呢,没啥思路,二叉树学的不好,GPT给了我一个,可以参考参考(我只能说,错一堆)
#include <iostream>
#include <string>
using namespace std;
struct Node {
char val;
Node *left;
Node *right;
Node(char x) : val(x), left(nullptr), right(nullptr) {}
};
string pre_order(Node *root) { //输出前序遍历结果
if (root == nullptr) {
return "";
}
string res = "";
res += root->val;
res += pre_order(root->left);
res += pre_order(root->right);
return res;
}
Node* build_tree(string& s, int& k) {
if (k < 0 || s[k] == '.') { //空节点
return nullptr;
}
Node *root = new Node(s[k]);
--k;
root->right = build_tree(s, k); //右子树先递归
--k;
root->left = build_tree(s, k);
return root;
}
int main() {
string s;
cin >> s;
int k = s.length() - 1; //后序遍历需要从后往前构建
Node *root = build_tree(s, k);
cout << pre_order(root) << endl;
return 0;
}