📄 好前缀二叉树608prefix.cpp
字号:
#include<iostream>
#include<fstream.h>
ifstream in("input.txt");
ofstream out("output.txt");
using namespace std;
class Stack
{
int top;
int stack[10000];
public:
Stack(){top=-1;}
int Top(){return stack[top];}
Stack Push(int a)
{
stack[++top]=a;
return *this;
}
int Pop()
{
return stack[top--];
}
bool Empty()
{
return top==-1;
}
};
class Node
{
public:
int left;
int right;
int L;
int R;
};
void cmp(Node *Tree1,int n,int t,Node* Tree2,int m,int r)
{
Stack s1,s2;
s1.Push(t);
s2.Push(r);
for(int i=1;i<n;)
{
int k1=s1.Top()-1;
int k2=s2.Top()-1;
if(Tree1[k1].L==0)
{
Tree1[k1].L=1;
Tree2[k2].L=1;
if(Tree1[k1].left)
{
s1.Push(Tree1[k1].left);
if(Tree2[k2].left==0)
{ out<<"No"<<endl;
break;}
else
{
s2.Push(Tree2[k2].left);
i++;
}
}
}
else if(Tree1[k1].R==0)
{
Tree1[k1].R=1;
Tree2[k2].L=1;
if(Tree1[k1].right)
{
s1.Push(Tree1[k1].right);
if(Tree2[k2].right==0)
{ out<<"No"<<endl;
break;}
else
{
s2.Push(Tree2[k2].right);
i++;
}
}
}
else
{
s1.Pop();
s2.Pop();
}
if(i==n)
{ out<<"Yes"<<endl;}
}
}
int main()
{
if(in.fail())
{
out<<"the input.txt is not exist!";
exit(1);
}
int m,n,a,b,c,e,d,f,i,*father1,*father2,r,t;
Node *Tree1,*Tree2;
in>>n;
Tree1=new Node[n];
father1=new int[n];
for(i=0;i<n;i++)
{
father1[i]=0;
}
for(i=0;i<n;i++)
{
in>>a>>b>>c;
Tree1[a-1].left=b;Tree1[a-1].right=c;
Tree1[a-1].L=0;Tree1[a-1].R=0;
if(b)
father1[b-1]=a;
if(c)
father1[c-1]=a;
}
for(i=0;i<n;i++)
{
if(father1[i]==0)
break;
}
t=i+1;
in>>m;
Tree2=new Node[m];
father2=new int[m];
for(i=0;i<m;i++)
{
father2[i]=0;
}
for(i=0;i<m;i++)
{
in>>e>>d>>f;
Tree2[e-1].left=d;Tree2[e-1].right=f;
Tree2[e-1].L=0;Tree2[e-1].R=0;
if(d)
father2[d-1]=e;
if(f)
father2[f-1]=e;
}
for(i=0;i<n;i++)
{
if(father2[i]==0)
break;
}
r=i+1;
if(n<m)
{
cmp(Tree1,n,t,Tree2,m,r);
out<<"No";
}
else if(n>m)
{
out<<"No"<<endl;
cmp(Tree2,m,r,Tree1,n,t);
}
else if(n==m)
{
cmp(Tree1,n,t,Tree2,m,r);
for(i=0;i<n;i++)
{
Tree1[i].L=0;Tree2[i].L=0;
Tree1[i].R=0;Tree2[i].R=0;
}
cmp(Tree2,m,r,Tree1,n,t);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -