Engineering
class Tree:def __init__(self, entry, branches=()):self.entry = entryfor branch in branches:assert isinstance(branch, Tree)self.branches = list(branches)def __repr__(self):if self.branches:branches_str = ', ' + repr(self.branches)else:branches_str = ''return 'Tree({0}{1})'.format(self.entry, branches_str)def __str__(self):def print_tree(t, indent=0):tree_str = ' ' * indent + str(t.entry) + "\n"for b in t.branches:tree_str += print_tree(b, indent + 1)return tree_strreturn print_tree(self).rstrip()def is_leaf(self):return not self.branchesWrite a function search that returns the Tree, whose entry is the given value if it exists and None if it does not. You can assume all entries are unique.def search(t, value):"""Searches for and returns the Tree whose entry is equal to value ifit exists and None if it does not. Assume unique entries.>>> t = Tree(1, [Tree(3, [Tree(5)]), Tree(7)])>>> search(t, 10)>>> search(t, 5)Tree(5)>>> search(t, 1)Tree(1, [Tree(3, [Tree(5)]), Tree(7)])""""*** YOUR CODE HERE ***"