একটি বাইনারি ট্রি দেওয়া থাকে। এর ডায়ামিটার বের করতে হবে। ডায়ামিটার হল ট্রিতে যেকোনো দুটি নোডের মধ্যে সর্বোচ্চ দূরত্ব (এজ সংখ্যা)। এটি রুট দিয়ে যেতে পারে নাও। উদাহরণে ট্রি [1,2,3,4,5] এর ডায়ামিটার ৩।
সমাধানের পদ্ধতি
- DFS (ডেপথ-ফার্স্ট সার্চ) ব্যবহার করুন।
ans = 0ইনিশিয়ালাইজ করুন।dfs(node)ফাংশন লিখুন:- যদি নোড না থাকে, ০ রিটার্ন করুন।
left = dfs(node.left),right = dfs(node.right)।ans = max(ans, left + right)আপডেট করুন।return max(left, right) + 1রিটার্ন করুন।
dfs(root)কল করুন এবংansরিটার্ন করুন।
উদাহরণ কোড
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:
temp.left = TreeNode(data)
break
else:
que.append(temp.left)
if not temp.right:
temp.right = TreeNode(data)
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 diameterOfBinaryTree(self, root):
self.ans = 0
self.dfs(root)
return self.ans
def dfs(self, node):
if not node:
return 0
left = self.dfs(node.left)
right = self.dfs(node.right)
self.ans = max(self.ans, right + left)
return max(left + 1, right + 1)
root = make_tree([1,2,3,4,5])
ob1 = Solution()
print(ob1.diameterOfBinaryTree(root))
ইনপুট
[1,2,3,4,5]
আউটপুট
3