Input: Enter two strings, pay attention to each number 0~9.
Idea: After the tree is built, pre-order traversal + middle-order traversal of the two trees, the results of the pre-order traversal are the same and the results of the middle-order traversal are the same, indicating the same two Fork search tree
code:
//判断两序列是否为同一二叉搜索树序列 、
//输入字符串,每个数字0~9
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct TreeNode{
int data;
TreeNode* leftChild;
TreeNode* rightChild;
TreeNode(int x):data(x),leftChild(NULL),rightChild(NULL){
}
};
TreeNode* insert(TreeNode *root,int number)
{
if(root==NULL) root=new TreeNode(number);
else if(number>root->data){
root->rightChild=insert(root->rightChild,number);
}
else{
root->leftChild=insert(root->leftChild,number);
}
return root;
}
void PreOrder(TreeNode*root,vector<int>&a)
{
if(root==NULL) return;
a.push_back(root->data);
PreOrder(root->leftChild,a);
PreOrder(root->rightChild,a);
return;
}
void InOrder(TreeNode*root,vector<int>&a)
{
if(root==NULL) return;
PreOrder(root->leftChild,a);
a.push_back(root->data);
PreOrder(root->rightChild,a);
return;
}
int main()
{
string str1;string str2;
cin>>str1>>str2;
if(str1.size()!=str2.size()) {
cout<<"NO"<<endl;
return 0;
}
TreeNode*root1=NULL;
TreeNode*root2=NULL;
for(int i=0;i<str1.size();++i)
{
int n1=str1[i]-'0';
int n2=str2[i]-'0';
root1=insert(root1,n1);
root2=insert(root2,n2);
}
vector<int>a1;vector<int>a2;
PreOrder(root1,a1);
PreOrder(root2,a2);
vector<int>a3;vector<int>a4;
InOrder(root1,a3);
InOrder(root2,a4);
if(a1==a2&&a3==a4) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}