ধরুন আমাদের একটি বাইনারি গাছের মূল আছে; আমাদের সেই গাছের যেকোনো সাবট্রির সর্বোচ্চ গড় মান খুঁজে বের করতে হবে। তাই গাছটি যদি −
এর মত হয়
আউটপুট 6 হবে, কারণ নোড 5 এর জন্য এটি হবে (5 + 6 + 1)/ 3 =4, তারপর নোড 6 এর জন্য এটি হবে 6/1 =6 এবং নোড 1 এর জন্য এটি হবে 1 / 1 =1, তাই সর্বোচ্চ হল 6৷
৷এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
res :=0
-
সমাধান() নামে একটি পদ্ধতি নির্ধারণ করুন, এটি রুট করবে
-
যদি রুট সেট করা না থাকে, তাহলে একটি জোড়া [0, 0]
ফেরত দিন -
বাম :=সমাধান (মূলের বামে) ডানে :=সমাধান (মূলের ডানদিকে)
-
c :=বাম[0] + ডান[0] + 1
-
s :=left[1] + right[1] + root এর মান
-
উত্তর :=সর্বাধিক এবং উত্তর s/c
-
একটি জোড়া [c, s]
ফেরত দিন -
মূল পদ্ধতি থেকে, উত্তর সেট করুন :=0, কল সল্ভ(রুট) এবং উত্তর দিন
উদাহরণ(পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: 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]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def helper(self, node): if not node: return 0, 0 left_sum, left_count = self.helper(node.left) right_sum, right_count = self.helper(node.right) self.ans = max(self.ans, (left_sum + right_sum + node.data) / (left_count + right_count + 1)) return left_sum + right_sum + node.data, left_count + right_count + 1 def maximumAverageSubtree(self, root): self.ans = 0 self.helper(root) return self.ans ob = Solution() root = make_tree([5,6,1]) print(ob.maximumAverageSubtree(root))
ইনপুট
[5,6,1]
আউটপুট
6.0