⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 好前缀二叉树608prefix.cpp

📁 设计一个算法
💻 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 + -