# 543 Diameter of Binary Tree

Given the `root` of a binary tree, return the length of the diameter of the tree.

The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the `root`.

The length of a path between two nodes is represented by the number of edges between them.

Example 1:

``````    1
/ \
2   3
/ \
4   5

Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].
``````

Example 2:

``````Input: root = [1,2]
Output: 1
``````

Constraints:

• The number of nodes in the tree is in the range `[1, 104]`.
• `-100 <= Node.val <= 100`
 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 `````` ``````# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def __init__(self): self.max_diameter = -1 def longest_path(self, root: Optional[TreeNode]) -> int: if not root: return 0 left_path = self.longest_path(root.left) right_path = self.longest_path(root.right) self.max_diameter = max(self.max_diameter, left_path + right_path) return max(left_path, right_path) + 1 def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: self.longest_path(root) return self.max_diameter``````