题目描述
二叉树分别以数组存储方式创建、以先序遍历序列创建。输入二叉树的数组存储、先序遍历结果,判断根据它们创建的二叉树是否是同一棵二叉树。
输入
测试次数t
每组测试数据两行:
第一行:二叉树的数组存储(英文字母表示树结点,#表示空树)
第二行:二叉树的先序遍历结果(英文字母表示树结点,#表示空树)
输出
对每组测试数据,如果两种方式创建的是同一棵二叉树,输出YES,否则,输出NO。
输入输出样例
输入样例1 <-复制
3
ABCDE
ABD##E##C##
ABC##DE####W##F
AB##CDW###E#F##
abc##d
ab##c#d##
输出样例1
YES
YES
NO
AC代码
#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct binode
{
char data;
binode* lchild, * rchild;
};
class bitree
{
binode* root;
string zu, chuan;
int wei;
public:
bitree()
{
cin >> zu >> chuan;
}
void pre1()
{
wei = -1;
pre2(root);
}
void pre2(binode* &node)
{
if (wei == chuan.length())
return;
wei++;
node = new binode;
if (chuan[wei] != '#')
{
node->data = chuan[wei];
pre2(node->lchild);
pre2(node->rchild);
}
else
{
node->data = '#';
node->lchild = NULL;
node->rchild = NULL;
}
}
void pan()
{
binode* p;
queue <binode*> q;
q.push(root);
int len = zu.length();
for (int i = 0; i<len ; i++)
{
p = q.front();
q.pop();
if (p)
{
if (p->data != zu[i])
{
cout << "NO" << endl;
return;
}
q.push(p->lchild);
q.push(p->rchild);
}
}
cout << "YES" << endl;
}
};
int main()
{
int t;
cin >> t;
while (t--)
{
bitree shu;
shu.pre1();
shu.pan();
}
}
(by 归忆)