题目描述
输入一串二叉树,用遍历前序打出。
输入输出格式
输入格式:
第一行为二叉树的节点数n。(n \leq 26n≤26)
后面n行,每一个字母为节点,后两个字母分别为其左右儿子。
空节点用*表示
输出格式:
前序排列的二叉树
输入输出样例
输入样例#1: 复制
6 abc bdi cj* d** i** j**
输出样例#1: 复制
abdicj
#include<iostream>
#include<vector>
#include<climits>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
typedef struct N
{
char p;
struct N* leftNode;
struct N* rightNode;
N(char s) :p(s),leftNode(NULL),rightNode(NULL) {}
} TreeNode;
void Insert(string s, TreeNode* r)
{
if (r == NULL)
return;
if (r->p == s[0])
{
if (s[1] != '*')
{
TreeNode* tmp = new TreeNode(s[1]);
r->leftNode = tmp;
}
else
r->leftNode = NULL;
if (s[2] != '*')
{
TreeNode* tmp = new TreeNode(s[2]);
r->rightNode = tmp;
}
else
r->rightNode = NULL;
}
else
{
Insert(s, r->leftNode);
Insert(s, r->rightNode);
}
}
void beforeSearch(TreeNode* s)
{
if (s == NULL)
return;
cout << s->p;
beforeSearch(s->leftNode);
beforeSearch(s->rightNode);
}
int main()
{
int n;
cin >> n;
string s;
cin >> s;
TreeNode* root = new TreeNode(s[0]);
if (s[1] != '*')
{
TreeNode* tmp = new TreeNode(s[1]);
root->leftNode = tmp;
}
else
root->leftNode = NULL;
if (s[2] != '*')
{
TreeNode* tmp = new TreeNode(s[2]);
root->rightNode = tmp;
}
else
root->rightNode = NULL;
for (int i = 1; i < n; i++)
{
cin >> s;
Insert(s,root);
}
beforeSearch(root);
return 0;
}