--- tags: data_structure_python --- # Diameter of Binary Tree <img src="https://img.shields.io/badge/-easy-brightgreen"> Given a binary tree, you need to compute 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. <ins>**Example:**</ins> Given a binary tree ``` 1 / \ 2 3 / \ 4 5 ``` Return 3, which is the length of the path ```[4,2,1,3]``` or ```[5,2,1,3]```. **Note:** The length of path between two nodes is represented by the number of edges between them. # Solution ### Solution 1: First approach DFS ```python= # Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def diameterOfBinaryTree(self, root: TreeNode) -> int: # Time complexity: O(n^2) if root is None: return 0 else: return max(self.dfs(root.left) + self.dfs(root.right), self.diameterOfBinaryTree(root.left), self.diameterOfBinaryTree(root.right)) def dfs(self, root): if root is None: return 0 else: return 1 + max(self.dfs(root.left), self.dfs(root.right)) ``` ### Solution 2: Second approach DFS ```python= # Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def diameterOfBinaryTree(self, root: TreeNode) -> int: if root == None: return 0 else: longest_path = -1 _, longest_path = self.dfs(root, longest_path) return longest_path def dfs(self, root, longest_path): if root == None: return 0, longest_path else: left, longest_path = self.dfs(root.left, longest_path) right, longest_path = self.dfs(root.right, longest_path) if left + right > longest_path: longest_path = left + right return 1 + max(left, right), longest_path ```