Максимальная глубина двоичного дерева может быть представлена как максимальная глубина его поддеревьев от левого или правого дочернего элемента плюс 1 для текущего уровня.Пусть глубина поддерева будет 0, если оно пустое (без левого или правого дочернего элемента).
Глубина этих поддеревьев, в свою очередь, может быть рассчитана таким же образом.
var leftMax=maxDepth(root.left)
var rightMax=maxDepth(root.right)
Таким образом, алгоритм делит поддеревья, пока не будет достигнут лист.Листья не имеют дочерних элементов (эквивалентно «каждый дочерний элемент имеет нулевую глубину»), поэтому его максимальная глубина поддеревьев равна нулю.
if(!root){ // no child for the parent node
return 0
}
Теперь давайте добавим 1 для текущего уровня и вернемся к предыдущему вызову.Для левого и правого поддеревьев выполняются одинаковые операции, поэтому алгоритм знает о глубине правого и левого поддеревьев в конце каждой итерации:
var leftMax=maxDepth(root.left)
var rightMax=maxDepth(root.right)
Это означает, что текущее дерево имеет максимальную глубину(глубина поддеревьев) плюс 1 для текущего уровня:
return Math.max(leftMax, rightMax)+1};
В вашем примере алгоритм идет настолько глубоко, насколько это возможно, сначала к левым дочерним элементам и возвращается для посещения более правильных.Эта стратегия называется Поиск в глубину