ধরুন আমাদের একটি বাইনারি গাছ আছে, আমাদের দেখতে হবে পাতা ছাড়া গাছের প্রতিটি নোডের জন্য এর মান তার বাম সন্তানের মানের সমষ্টি এবং ডান সন্তানের মানের সমান কিনা।
সুতরাং, যদি ইনপুট মত হয়
তাহলে আউটপুট হবে True
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি রুট নেবে
-
যদি রুট শূন্য হয়, তাহলে
-
রিটার্ন ট্রু
-
-
যদি রুটের বাম অংশ নাল হয় এবং রুটের ডানদিকে শূন্য হয়, তাহলে
-
রিটার্ন ট্রু
-
-
বাম :=0
-
যদি মূলের বাম অংশ শূন্য না হয়, তাহলে
-
left :=রুটের বাম মান
-
-
ডান :=0
-
যদি মূলের ডানদিকে শূন্য না হয়, তাহলে
-
right :=রুটের ডানের মান
-
-
(বাম + ডান রুটের মান হিসাবে একই) এবং dfs (রুটের বাম) সত্য এবং dfs (রুটের ডানদিকে) সত্য হলে
-
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
dfs(root)
ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root): def dfs(root): if root == None: return True if root.left == None and root.right == None: return True left = 0 if root.left: left = root.left.val right = 0 if root.right: right = root.right.val return (left + right == root.val) and dfs(root.left) and dfs(root.right) return dfs(root) ob = Solution() root = TreeNode(18) root.left = TreeNode(8) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5) print(ob.solve(root))
ইনপুট
root = TreeNode(18) root.left = TreeNode(8) root.right = TreeNode(10) root.left.left = TreeNode(3) root.left.right = TreeNode(5)
আউটপুট
True