Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <string>
- using namespace std;
- class tree {
- public:
- char d;
- tree *left, *right;
- };
- stack<string> data;
- tree* readtree() {
- string s = data.top();
- data.pop();
- if(s == "nil") {
- return 0;
- }
- tree *t = new tree;
- t->d = s[0];
- t->right = readtree();
- t->left = readtree();
- return t;
- }
- bool equaltrees(tree* a, tree* b) {
- if(a == 0 && b == 0) return true;
- if(a != 0 && b == 0) return false;
- if(a == 0 && b != 0) return false;
- if(a->d != b->d) return false;
- return (equaltrees(a->left, b->left) && equaltrees(a->right, b->right) ||
- equaltrees(a->left, b->right) && equaltrees(a->right, b->left));
- }
- void deletetree(tree* t) {
- if(t != 0) {
- deletetree(t->right);
- deletetree(t->left);
- delete t;
- }
- }
- int main() {
- int n = 0;
- string l;
- getline(cin, l);
- for(int i = 0; i < l.length(); i++) {
- if(isdigit(l[i])) {
- n *= 10;
- n += (l[i] - '0');
- }
- }
- while(n-->0) {
- tree *trees[2];
- for(int i = 0; i < 2; i++) {
- while(!data.empty()) data.pop();
- while(true) {
- string w;
- cin >> w;
- if(w == "end") break;
- data.push(w);
- }
- trees[i] = readtree();
- }
- if(equaltrees(trees[0], trees[1])) cout << "true" << endl;
- else cout << "false" << endl;
- deletetree(trees[0]);
- deletetree(trees[1]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement