题目描述
二叉树分别以数组存储方式创建、以先序遍历序列创建。 输入二叉树的数组存储、先序遍历结果,
判断根据它们创建的二叉树是否是同一棵二叉树。输入
测试次数t
每组测试数据两行:
第一行:二叉树的数组存储(英文字母表示树结点,#表示空树)
第二行:二叉树的先序遍历结果(英文字母表示树结点,#表示空树)输出
对每组测试数据,如果两种方式创建的是同一棵二叉树,输出YES,否则,输出NO。
样例输入
3
ABCDE
ABD##E##C
ABC##DE####W##F
AB##CDW###E#F##
abc##d
ab##c#d样例输出
YES
YES
NO
#include <iostream>
#include <string>
using namespace std;
class Binary_tree_node
{
public:
char data;
Binary_tree_node *left;
Binary_tree_node *right;
Binary_tree_node()
{
left = right = NULL;
}
};
class Binary_tree
{
public:
int pos;
Binary_tree_node *Root;
string strtree;
string strpre;
string strin;
Binary_tree(string str)
{
strpre = "";
strin = "";
pos = 0;
strtree = str;
Root = CreateBitree();
}
Binary_tree_node *CreateBitree()
{
char ch = strtree[pos];
pos++;
if (ch == '#')
return NULL;
else
{
Binary_tree_node *T = new Binary_tree_node();
T->data = ch;
T->left = CreateBitree();
T->right = CreateBitree();
return T;
}
}
void preorder(Binary_tree_node *T)
{
if (T != NULL)
{
strpre += T->data;
preorder(T->left);
preorder(T->right);
}
return;
}
void inorder(Binary_tree_node *T)
{
if (T != NULL)
{
inorder(T->left);
strin += T->data;
inorder(T->right);
}
return;
}
};
class Martree
{
public:
char *Tree;
int number;
string strpre;
string strin;
Martree(string str)
{
strpre = "";
strin = "";
number = (int)str.size();
Tree = new char[number];
for (int i = 0; i < number; i++)
Tree[i] = str[i];
}
void preorder(int i)
{
if (i < number)
{
if (Tree[i] != '#')
{
strpre += Tree[i];
preorder(2 * i + 1);
preorder(2 * i + 2);
}
}
return;
}
void inorder(int i)
{
if (i < number)
{
if (Tree[i] != '#')
{
inorder(2 * i + 1);
strin += Tree[i];
inorder(2 * i + 2);
}
}
return;
}
};
int main()
{
int T;
cin >> T;
while (T--)
{
string str1, str2;
cin >> str1 >> str2;
if (str2[str2.size() - 1] != '#')
str2 += "##";
Martree mTree(str1);
Binary_tree bTree(str2);
mTree.preorder(0);
mTree.inorder(0);
bTree.preorder(bTree.Root);
bTree.inorder(bTree.Root);
if (mTree.strpre == bTree.strpre && mTree.strin == bTree.strin)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}