# 543-diameter-of-binary-tree Try it on leetcode ## Description

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:

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:

## Solution(Python) ```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: return self.optimize(root) # Time Complexity: O(n^2) # Space Complexity: O(H) def bruteforce(self, node: Optional[TreeNode]) -> int: if node is None: return 0 lheight = self.height(node.left) rheight = self.height(node.right) ldiameter = self.bruteforce(node.left) rdiameter = self.bruteforce(node.right) return max(lheight + rheight, max(ldiameter, rdiameter)) # Time Complexity: O(n) # Space Complexity: O(H) def optimize(self, node: Optional[TreeNode]) -> int: ans = 0 def dfs(node): nonlocal ans if node is None: return 0 left_height = dfs(node.left) right_height = dfs(node.right) cur_width = left_height + right_height if cur_width > ans: ans = cur_width return 1 + max(left_height, right_height) dfs(node) return ans def height(self, node): if node is None: return 0 return 1 + max(self.height(node.left), self.height(node.right)) ```