From a2f059e194bcc3002a7bdab27424b372eee855fb Mon Sep 17 00:00:00 2001 From: Max Bucknell Date: Fri, 14 Mar 2025 23:07:07 -0700 Subject: [PATCH] Add depth function --- lib/mb_binary_tree.ex | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/lib/mb_binary_tree.ex b/lib/mb_binary_tree.ex index 80c93ae..efb41b7 100644 --- a/lib/mb_binary_tree.ex +++ b/lib/mb_binary_tree.ex @@ -97,4 +97,28 @@ defmodule MbBinaryTree do [12, nil, [4, nil, nil]] """ def update_right([node, left, _right], new_right), do: [node, left, new_right] + + @doc """ + Calculate the depth of a binary tree. + + ## Examples + + iex> MbBinaryTree.depth(nil) + 0 + iex> MbBinaryTree.depth([1, nil, nil]) + 1 + iex> MbBinaryTree.depth([1, [2, nil, nil], [3, nil, nil]]) + 2 + iex> MbBinaryTree.depth([1, [2, nil, nil], [3, [4, nil, nil], [5, nil, nil]]]) + 3 + iex> MbBinaryTree.depth([12, [4, MbBinaryTree.new(2), MbBinaryTree.new(5)], [26, MbBinaryTree.new(14), [28, MbBinaryTree.new(27), MbBinaryTree.new(30)]]]) + 4 + """ + def depth(tree) do + case tree do + nil -> 0 + [_, nil, nil] -> 1 + [_, left, right] -> 1 + max(depth(left), depth(right)) + end + end end