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

, 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 −

 Live Demo

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
Updated on: 2021-01-18T12:09:11+05:30

234 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements