ধরুন, আমাদের দুটি এক্সপ্রেশন ট্রি দেওয়া হয়েছে। আমাদের একটি প্রোগ্রাম লিখতে হবে যা দুটি এক্সপ্রেশন ট্রি পরীক্ষা করে এবং এক্সপ্রেশন ট্রি একই মান তৈরি করে কিনা তা নির্ধারণ করে। দুটি এক্সপ্রেশন ট্রি আমাদেরকে একটি ক্রমানুসারে প্রদান করা হয় এবং আমরা একটি সত্য মান ফেরত দিই যদি সেগুলি মিলে যায়, অন্যথায় আমরা একটি মিথ্যা মান ফেরত দিই৷
সুতরাং, যদি ইনপুট মত হয়
তাহলে আউটপুট হবে True।
দুটি এক্সপ্রেশন ট্রি একই মানের মূল্যায়ন করে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
-
একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি নোড, dic
নেবে-
যদি নোড খালি থাকে, তাহলে
-
ফেরত
-
-
যদি নোডের বাম এবং নোডের ডানদিকে খালি না হয়, তাহলে
-
dic[নোডের মান] :=dic[নোডের মান] + 1
-
-
dfs(নোডের বামে, dic)
-
dfs(নোডের ডানদিকে, dic)
-
-
dic1 :=পূর্ণসংখ্যার মান সম্বলিত একটি নতুন মানচিত্র
-
dic2 :=পূর্ণসংখ্যার মান সম্বলিত একটি নতুন মানচিত্র
-
dfs(root1, dic1)
-
dfs(root2, dic2)
-
রিটার্ন True যদি dic1 dic2 এর মত হয়।
উদাহরণ
ইমপোর্ট কালেকশন ক্লাস ট্রিনোড:def __init__(self, val=0, left=None, right=None):self.val =val self.left =left self.right =rightdef insert(temp,data):que =[ ] que.append(temp) while (len(que)):temp =que[0] que.pop(0) if (temp.left নয়):যদি ডেটা না হয়:temp.left =TreeNode(data) else :temp.left =TreeNode(0) break else:que.append(temp.left) if (not temp.right):if data is not None:temp.right =TreeNode(data) else:temp.right =TreeNode( 0) break else:que.append(temp.right)def make_tree(elements):Tree =TreeNode(elements[0]):উপাদানে উপাদানের জন্য[1:]:insert(Tree, element) return Treedef solve(root1, root2) ):dic1 =collections.defaultdict(int) dic2 =collections.defaultdict(int) def dfs(নোড, dic):যদি নোড না হয়:রিটার্ন না হলে node.left এবং node.right না হলে:dic[নোড .val] +=1 dfs(node.left, dic) dfs(node.right, dic) dfs(root1, dic1) dfs(root2, dic2) রিটার্ন dic1 ==dic2root1 =make_tree([1, '+', 2) , '*', 3, '+', 4 ])root2 =make_tree([2, '+', 1, '*', 4, '+', 3])print(solve(root1, root2))প্রে>ইনপুট
root1 =make_tree([1, '+', 2, '*', 3, '+', 4 ])root2 =make_tree([2, '+', 1, '*', 4, '+ ', 3])আউটপুট
সত্য