m2skills

isomorphic bt cpp

May 16th, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.95 KB | None | 0 0
  1. // program to check if 2 given trees are isomorphic or not
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. // node class
  7. class node{
  8. public:
  9.     int data;
  10.     node* left;
  11.     node* right;
  12. };
  13.  
  14. // function that returns a pointer to new node
  15. node* createNode(int element){
  16.     node* temp = (node*) malloc(sizeof(node));
  17.     temp->data = element;
  18.     temp->left = NULL;
  19.     temp->right = NULL;
  20.     return temp;
  21. }
  22.  
  23. // function to check if 2 given trees are isomorphic to each other
  24. bool isomorphic_tree(node* root1, node* root2){
  25.     // if both the nodes are null then return true
  26.     if (root1 == NULL && root2 == NULL){
  27.         return true;
  28.     }
  29.     // if any one of them is null then return false
  30.     if (root1 == NULL || root2 == NULL){
  31.         return false;
  32.     }
  33.     // if the data fields are not equal then return false
  34.     if (root1->data != root2->data){
  35.         return false;
  36.     }
  37.     // else check if the left and the right subtrees are isomorphic recursively
  38.     return (
  39.             ( isomorphic_tree(root1->left, root2->left) && isomorphic_tree(root1->right, root2->right) ) ||
  40.             ( isomorphic_tree(root1->left, root2->right) && isomorphic_tree(root1->right, root2->left) )
  41.     );
  42. }
  43.  
  44.  
  45.  
  46. int main() {
  47.  
  48.     node* head = createNode(1);
  49.     head->left = createNode(2);
  50.     head->right = createNode(3);
  51.     head->left->left = createNode(4);
  52.     head->left->right = createNode(5);
  53.     head->right->right = createNode(6);
  54.     head->left->left->right = createNode(7);
  55.     head->right->right->left = createNode(8);
  56.     head->left->left->right->left = createNode(9);
  57.     head->left->left->right->left->left = createNode(10);
  58.     head->right->right->left->right = createNode(11);
  59.    
  60.     node* head2 = createNode(5);
  61.     head2->left = createNode(2);
  62.     head2->right = createNode(12);
  63.     head2->left->left = createNode(-4);
  64.     head2->left->right = createNode(3);
  65.     head2->right->left = createNode(9);
  66.     head2->right->right = createNode(21);
  67.     head2->right->right->left = createNode(19);
  68.     head2->right->right->right = createNode(25);
  69.  
  70.     node* i1 = createNode(1);
  71.     i1->left = createNode(2);
  72.     i1->right = createNode(3);
  73.     i1->left->left = createNode(4);
  74.     i1->left->right = createNode(5);
  75.     i1->right->left = createNode(6);
  76.     i1->left->right->left = createNode(7);
  77.     i1->left->right->right = createNode(8);
  78.  
  79.     node* i2 = createNode(1);
  80.     i2->left = createNode(3);
  81.     i2->right = createNode(2);
  82.     i2->right->left = createNode(4);
  83.     i2->right->right = createNode(5);
  84.     i2->left->right = createNode(6);
  85.     i2->right->right->right = createNode(7);
  86.     i2->right->right->left = createNode(8);
  87.  
  88.     cout<<"TREE #1 and TREE #2 are isomorphic : "<<isomorphic_tree(head, head2)<<endl;
  89.     cout<<"TREE #3 and TREE #4 are isomorphic : "<<isomorphic_tree(i1, i2);
  90.  
  91.  
  92. }
  93.  
  94.  
  95.  
  96. /*
  97.  
  98. TREE #1 and TREE #2 are isomorphic : 0
  99. TREE #3 and TREE #4 are isomorphic : 1
  100. Process finished with exit code 0
  101.  
  102. */
Add Comment
Please, Sign In to add comment