# 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:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1720454899826/62cd2941-9b4d-42ce-9696-aa3a45532f58.jpeg align="center")

  
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:**

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

**Constraints:**

* The number of nodes in the tree is in the range `[1, 10<sup>4</sup>]`.
    
* `-100 <= Node.val <= 100`
    

Solution:

```python
# 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 diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        res = 0

        def dfs(root):
            nonlocal res

            if not root:
                return -1
            left = dfs(root.left)
            right = dfs(root.right)
            res = max(res, left + right + 2)

            return 1 + max(left, right)

        dfs(root)
        return res
```
