Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. class tree {
  8. public:
  9.     char d;
  10.     tree *left, *right;
  11. };
  12.  
  13. stack<string> data;
  14.  
  15. tree* readtree() {
  16.     string s = data.top();
  17.     data.pop();
  18.     if(s == "nil") {
  19.         return 0;
  20.     }
  21.     tree *t = new tree;
  22.     t->d = s[0];
  23.     t->right = readtree();
  24.     t->left = readtree();
  25.  
  26.     return t;
  27. }
  28.  
  29. bool equaltrees(tree* a, tree* b) {
  30.     if(a == 0 && b == 0) return true;
  31.     if(a != 0 && b == 0) return false;
  32.     if(a == 0 && b != 0) return false;
  33.     if(a->d != b->d) return false;
  34.  
  35.     return (equaltrees(a->left, b->left) && equaltrees(a->right, b->right) ||
  36.             equaltrees(a->left, b->right) && equaltrees(a->right, b->left));
  37. }
  38.  
  39. void deletetree(tree* t) {
  40.     if(t != 0) {
  41.         deletetree(t->right);
  42.         deletetree(t->left);
  43.         delete t;
  44.     }
  45. }
  46.  
  47. int main() {
  48.     int n = 0;
  49.     string l;
  50.     getline(cin, l);
  51.     for(int i = 0; i < l.length(); i++) {
  52.       if(isdigit(l[i])) {
  53.     n *= 10;
  54.     n += (l[i] - '0');
  55.       }
  56.     }
  57.     while(n-->0) {
  58.         tree *trees[2];        
  59.         for(int i = 0; i < 2; i++) {
  60.             while(!data.empty()) data.pop();
  61.             while(true) {
  62.                 string w;
  63.                 cin >> w;
  64.                 if(w == "end") break;
  65.                 data.push(w);                
  66.             }            
  67.             trees[i] = readtree();
  68.         }
  69.         if(equaltrees(trees[0], trees[1])) cout << "true" << endl;
  70.         else cout << "false" << endl;
  71.         deletetree(trees[0]);
  72.         deletetree(trees[1]);
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement