AIZU 1001 Binary Tree Intersection And Union
2012-05-26 17:20
169 查看
本来很简单的题目,一开始是开数组去搞,果断地runtime error。因为最多有100个node,也就是说数组要开到2^100去,一开始脑子打结了~~晕~~
后来就用链表搞,晕,DFS1()写错了,操,就写错一个参数~~
后来就用链表搞,晕,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; } } }
相关文章推荐
- [Leetcode]@python 106. Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode][python]Construct Binary Tree from Preorder and Inorder Traversal (Inorder and Postorder)
- LeetCode:105_Construct Binary Tree from Preorder and Inorder Traversal | 根据前序和中序遍历构建二叉树 | Medium
- LeetCode题解:Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal (Medium) (cpp)
- [C++]LeetCode: 38 Construct Binary Tree from Inorder and Postorder Traversal
- [Leetcode] Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- Java for LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal | Java最短代码实现
- [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode #106 Construct Binary Tree from Inorder and Postorder Traversal
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 随笔之 ------ Construct Binary Tree from Inorder and Postorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal
- 106. Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode105 Construct Binary Tree from Preorder and Inorder Traversal