Dados dos árboles binarios, devuelve verdadero si dos árboles son espejo uno del otro, de lo contrario, devuelve falso.
Árbol espejo:
C++
// C++ code to check two binary trees are // mirror. #include<bits/stdc++.h> using namespace std; struct Node { int data; Node* left, *right; }; // inorder traversal of Binary Tree void inorder(Node *n, vector<int> &v) { if (n->left != NULL) inorder(n->left, v); v.push_back(n->data); if (n->right != NULL) inorder(n->right, v); } // Checking if binary tree is mirror // of each other or not. bool areMirror(Node* a, Node* b) { if (a == NULL && b == NULL) return true; if (a == NULL || b== NULL) return false; // Storing inorder traversals of both // the trees. vector<int> v1, v2; inorder(a, v1); inorder(b, v2); if (v1.size() != v2.size()) return false; // Comparing the two arrays, if they // are reverse then return 1, else 0 for (int i=0, j=v2.size()-1; j >= 0; i++, j--) if (v1[i] != v2[j]) return false; return true; } // Helper function to allocate a new node Node* newNode(int data) { Node* node = new Node; node->data = data; node->left = node->right = NULL; return(node); } // Driver code int main() { Node *a = newNode(1); Node *b = newNode(1); a -> left = newNode(2); a -> right = newNode(3); a -> left -> left = newNode(4); a -> left -> right = newNode(5); b -> left = newNode(3); b -> right = newNode(2); b -> right -> left = newNode(5); b -> right -> right = newNode(4); areMirror(a, b)? cout << "Yes" : cout << "No"; return 0; }
Python3
# Python3 code to check two binary trees are # mirror. class Node: def __init__(self, data): self.data = data self.left = None self.right = None # inorder traversal of Binary Tree def inorder(n, v): if (n.left != None): inorder(n.left, v); v.append(n.data); if (n.right != None): inorder(n.right, v); # Checking if binary tree is mirror # of each other or not. def areMirror(a, b): if (a == None and b == None): return True; if (a == None or b== None): return False; # Storing inorder traversals of both # the trees. v1 = [] v2 = [] inorder(a, v1); inorder(b, v2); if (len(v1) != len(v2)): return False; # Comparing the two arrays, if they # are reverse then return 1, else 0 i = 0 j = len(v2) - 1 while j >= 0: if (v1[i] != v2[j]): return False i+=1 j-=1 return True; # Helper function to allocate a new node def newNode(data): node = Node(data) return node # Driver code if __name__=="__main__": a = newNode(1); b = newNode(1); a.left = newNode(2); a.right = newNode(3); a.left.left = newNode(4); a.left.right = newNode(5); b.left = newNode(3); b.right = newNode(2); b.right.left = newNode(5); b.right.right = newNode(4); if areMirror(a, b): print("Yes") else: print("No") # This code is contributed by rutvik_56
C#
// C# code to check two binary trees are // mirror. using System; using System.Collections; using System.Collections.Generic; class GFG{ class Node { public int data; public Node left, right; }; // inorder traversal of Binary Tree static void inorder(Node n, ref List<int> v) { if (n.left != null) inorder(n.left, ref v); v.Add(n.data); if (n.right != null) inorder(n.right, ref v); } // Checking if binary tree is mirror // of each other or not. static bool areMirror(Node a, Node b) { if (a == null && b == null) return true; if (a == null || b == null) return false; // Storing inorder traversals of both // the trees. List<int> v1 = new List<int>(); List<int> v2 = new List<int>(); inorder(a, ref v1); inorder(b, ref v2); if (v1.Count != v2.Count) return false; // Comparing the two arrays, if they // are reverse then return 1, else 0 for(int i = 0, j = v2.Count - 1; j >= 0; i++, j--) if (v1[i] != v2[j]) return false; return true; } // Helper function to allocate a new node static Node newNode(int data) { Node node = new Node(); node.data = data; node.left = node.right = null; return(node); } // Driver code static void Main(string []args) { Node a = newNode(1); Node b = newNode(1); a.left = newNode(2); a.right = newNode(3); a.left.left = newNode(4); a.left.right = newNode(5); b.left = newNode(3); b.right = newNode(2); b.right.left = newNode(5); b.right.right = newNode(4); if (areMirror(a, b)) { Console.Write("Yes"); } else { Console.Write("No"); } } } // This code is contributed by pratham76
Javascript
<script> // JavaScript code to check two binary trees are // mirror. class Node { constructor() { this.data = 0; this.left = null; this.right = null; } }; // inorder traversal of Binary Tree function inorder(n, v) { if (n.left != null) inorder(n.left, v); v.push(n.data); if (n.right != null) inorder(n.right, v); } // Checking if binary tree is mirror // of each other or not. function areMirror(a, b) { if (a == null && b == null) return true; if (a == null || b == null) return false; // Storing inorder traversals of both // the trees. var v1 = []; var v2 = []; inorder(a, v1); inorder(b, v2); if (v1.length != v2.length) return false; // Comparing the two arrays, if they // are reverse then return 1, else 0 for(var i = 0, j = v2.length - 1; j >= 0; i++, j--) if (v1[i] != v2[j]) return false; return true; } // Helper function to allocate a new node function newNode(data) { var node = new Node(); node.data = data; node.left = node.right = null; return(node); } // Driver code var a = newNode(1); var b = newNode(1); a.left = newNode(2); a.right = newNode(3); a.left.left = newNode(4); a.left.right = newNode(5); b.left = newNode(3); b.right = newNode(2); b.right.left = newNode(5); b.right.right = newNode(4); if (areMirror(a, b)) { document.write("Yes"); } else { document.write("No"); } </script>