您的位置:首页 > 大数据 > 人工智能

AIZU 1001 Binary Tree Intersection And Union

2012-05-26 17:20 169 查看
本来很简单的题目,一开始是开数组去搞,果断地runtime error。因为最多有100个node,也就是说数组要开到2^100去,一开始脑子打结了~~晕~~

后来就用链表搞,晕,DFS1()写错了,操,就写错一个参数~~
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <limits.h>
#include <queue>
#include <stack>
using namespace std;
struct treenode
{
treenode *l,*r;
treenode(){l = NULL;r =NULL;}
};
stack <treenode*> S;
string getans(treenode* p)
{
if(p == NULL) return "";
else return "("+getans(p->l)+","+getans(p->r)+")";
}
void DFS1(treenode *root,treenode *root1,treenode *root2)
{
//cout<<l++<<endl;
if(root1->l!=NULL&&root2->l!=NULL)
{
treenode *node = new treenode;
root ->l = node;
DFS1(root->l,root1->l,root2->l);
}
if(root1->r!=NULL&&root2->r!=NULL)
{
treenode *node = new treenode;
root ->r = node;
DFS1(root->r,root1->r,root2->r);
}

}
void DFS2(treenode *root,treenode* root1)
{
if(root1->l!=NULL)
{
if(root->l==NULL){
treenode *node = new treenode;
root ->l = node;}
DFS2(root->l,root1->l);
}
if(root1->r!=NULL)
{
if(root->r==NULL){
treenode *node = new treenode;
root->r = node;}
DFS2(root->r,root1->r);
}
}
int main()
{
int i,j;
char op[2],tree1[10000],tree2[10000];

while(scanf("%s%s%s",&op,&tree1,&tree2)!=EOF)
{
int len1 = strlen(tree1);
int len2 = strlen(tree2);
//int cur;
treenode *root1 = new treenode;
for(i = 0;i < len1;i ++)
{
//cout<<tree1[i]<<endl;
if(tree1[i]=='(')
{
if(i == 0)
{
S.push(root1);
}
else
{
if(tree1[i-1] == '(')
{
treenode* tmp = S.top();
treenode* node = new treenode;
S.push(node);
tmp ->l = node;
}
else
{
treenode* tmp = S.top();
treenode* node = new treenode;
S.push(node);
tmp->r = node;
}
}
}
else if(tree1[i] == ')') S.pop();
}
//cout<<"dsa"<<endl;
treenode *root2 = new treenode;
for(i = 0;i < len2;i ++)
{
if(tree2[i]=='(')
{
if(i == 0)
{
S.push(root2);
}
else
{
if(tree2[i-1] == '(')
{
treenode* tmp = S.top();
treenode* node = new treenode;
S.push(node);
tmp ->l = node;
}
else
{
treenode* tmp = S.top();
treenode* node = new treenode;
S.push(node);
tmp->r = node;
}
}
}
else if(tree2[i] == ')') S.pop();
}
//cout<<"sda"<<endl;
if(op[0]=='i')
{
treenode *root = new treenode;
DFS1(root,root1,root2);
//cout<<"das"<<endl;
string ans = getans(root);
cout<<ans<<endl;
}
else
{
treenode *root = new treenode;
DFS2(root,root1);
DFS2(root,root2);
string ans = getans(root);
cout<<ans<<endl;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐