You have two very large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes Create an algorithm to decide if T2 is a subtree of T1
#include <iostream> using namespace std; typedef int Data; struct Node { Node(Data d):data(d){left = right = NULL;}; Data data; Node* left; Node* right; Node* parent; }; class Tree { public: Tree():root(NULL){}; Node* root; bool contains(Tree dst) { return subTree(root, dst.root); }; private: bool matchTree(Node* a, Node* b) { if(a == NULL && b == NULL) return true; if(a != NULL && b != NULL && a->data == b->data) return matchTree(a->left, b->left) && matchTree(a->right, b->right); return false; }; bool subTree(Node* a, Node* b) { if(b == NULL) return true; if(a == NULL) return false; if(a->data == b->data) { return matchTree(a, b); } else { return subTree(a->left, b) || subTree(a->right, b); } };};int main() { Tree tree; tree.root = new Node(5); tree.root->left = new Node(1); tree.root->right = new Node(7); tree.root->left->right = new Node(4); tree.root->left->right->left = new Node(3); Tree tree2; tree2.root = new Node(4); tree2.root->left = new Node(3); cout<<boolalpha<<tree.contains(tree2); system("pause"); };