# Problem

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.

**Example:**

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.

**height of the left subtree + the height of right subtree + 1**

**ldiameter**will be the height of the left subtree. and repeat for

**rdiameter.**

height of the left subtree + the height of right subtree + 1,max (ldiameter, rdiameter) )

max(height of the left subtree + the height of right subtree + 1,max (ldiameter, rdiameter) ))

# solution

/** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public var right: TreeNode? * public init(_ val: Int) { * self.val = val * self.left = nil * self.right = nil * } * } */ class Solution { func diameterOfBinaryTree(_ root: TreeNode?) -> Int { guard root != nil else{return 0} return diameter(root: root) } func diameter(root: TreeNode?) -> Int { guard root != nil else{return 0} var rootDiameter:Int = heightOfBinaryTree(root: root?.left) + heightOfBinaryTree(root: root?.right) + 1 print("\(rootDiameter)") var leftDiameter:Int = diameter(root: root?.left) var rightDiameter:Int = diameter(root: root?.right) return max(rootDiameter, max(leftDiameter, rightDiameter)) } func heightOfBinaryTree(root: TreeNode?) ->Int { if(root == nil){ return 0 }else{ return max(heightOfBinaryTree(root: root?.left), heightOfBinaryTree(root: root?.left)) + 1 } } }

reference

https://leetcode.com/explore/other/card/30-day-leetcoding-challenge/529/week-2/3293/