Computer >> Computer tutorials >  >> Programming >> Python

Check if all levels of two trees are anagrams or not in Python


Suppose, we are provided with two binary trees. We have to check if each level of a binary tree is an anagram of the other binary tree's same level. We return True if it is an anagram, otherwise we return False.

So, if the input is like

Check if all levels of two trees are anagrams or not in Python

, then the output will be True.

To solve this, we will follow these steps −

  • tree_1 is the root node of the first tree and tree_2 is the root node of the second tree.
  • if tree_1 is same as null and tree_2 is same as null, then
    • return True
  • if tree_1 is same as null or tree_2 is same as null, then
    • return False
  • queue1 := a new queue
  • queue2 := a new queue
  • insert tree_1 at the end of queue1
  • insert tree_2 at the end of queue2
  • while 1 is non-zero, do
    • size1 := size of queue1
    • size2 := size of queue2
    • if size1 is not same as size2, then
      • return False
    • if size1 is same as 0, then
      • come out from the loop
    • curr_level1 := a new list
    • curr_level2 := a new list
    • while size1 > 0, do
      • node1 := first element of queue1
      • delete first element from queue1
      • if left of node1 is not same as null, then
        • insert left of node1 at the end of queue1
      • if right of node1 is not same as null, then
        • insert right of node1 at the end of queue1
      • size1 := size1 - 1
      • node2 := first element of queue2
      • delete first element from queue2
      • if left of node2 is not same as null, then
        • insert left of node2 at the end of queue2
      • if right of node2 is not same as null, then
        • insert right of node2 at the end of queue2
      • insert value of node1 at the end of curr_level1
      • insert value of node2 at the end of curr_level2
    • sort the list curr_level1
    • sort the list curr_level2
    • if curr_level1 is not same as curr_level2, then
      • return False
  • return True

Example

Let us see the following implementation to get better understanding −

def make_tree(elements):
   tree = tree_node(elements[0])
   for element in elements[1:]:
      insert_value(tree, element)
   return tree
def insert_value(temp,value):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if value is not None:
            temp.left = tree_node(value)
         else:
            temp.left = tree_node(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if value is not None:
            temp.right = tree_node(value)
         else:
            temp.right = tree_node(0)
         break
      else:
         que.append(temp.right)
class tree_node:
   def __init__(self, value):
      self.value = value
      self.left = None
      self.right = None
def solve(tree_1, tree_2) :
   if (tree_1 == None and tree_2 == None) :
      return True
   if (tree_1 == None or tree_2 == None) :
      return False
   queue1 = []
   queue2 = []
   queue1.append(tree_1)
   queue2.append(tree_2)
   while (1) :
      size1 = len(queue1)
      size2 = len(queue2)
      if (size1 != size2):
         return False
      if (size1 == 0):
         break
      curr_level1 = []
      curr_level2 = []
      while (size1 > 0):
         node1 = queue1[0]
         queue1.pop(0)
         if (node1.left != None) :
            queue1.append(node1.left)
         if (node1.right != None) :
            queue1.append(node1.right)
         size1 -= 1
         node2 = queue2[0]
         queue2.pop(0)
         if (node2.left != None) :
            queue2.append(node2.left)
         if (node2.right != None) :
            queue2.append(node2.right)
         curr_level1.append(node1.value)
         curr_level2.append(node2.value)
      curr_level1.sort()
      curr_level2.sort()
      if (curr_level1 != curr_level2) :
         return False
   return True
tree_1 = make_tree([5, 6, 7, 9, 8])
tree_2 = make_tree([5, 7, 6, 8, 9])
print(solve(tree_1, tree_2))

Input

[5, 6, 7, 9, 8], [5, 7, 6, 8, 9]

Output

True