Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

readme.md

543. Diameter of Binary Tree

Easy

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:

  • The number of nodes in the tree is in the range [1, 104].
  • -100 <= Node.val <= 100

Solution

# Definition for a binary tree node.
#
# defmodule TreeNode do
#   @type t :: %__MODULE__{
#           val: integer,
#           left: TreeNode.t() | nil,
#           right: TreeNode.t() | nil
#         }
#   defstruct val: 0, left: nil, right: nil
# end

defmodule Solution do
  @spec diameter_of_binary_tree(root :: TreeNode.t | nil) :: integer
  def diameter_of_binary_tree(root),
    do: rec_diameter(root)
        |> then(fn {max, _} -> max end)

  @spec rec_diameter(root :: TreeNode.t | nil) :: {integer, integer}
  defp rec_diameter(nil), do: {0, 0}
  defp rec_diameter(%TreeNode{left: l, right: r}) do
    {l_max, l_longest} = rec_diameter(l)
    {r_max, r_longest} = rec_diameter(r)
    {max(max(l_max, r_max), l_longest + r_longest), max(l_longest, r_longest) + 1}
  end
end