Мы должны посетить все узлы листьев и выяснить, насколько глубоко они. Это предполагает:
Дайте вашему узел-посещения функции дополнительного аргумент. Он должен знать не только там, где это происходит, но и как глубоко он. Каждый раз, когда это называется, это называется на углубиться, так что ваш посетитель узел просто должен увеличивать глубину номер он получил от вызывающего абонента.
Теперь один из 2-х вещей может произойти:
Либо узел вы нашли это листовой узел, т.е. не имеет детей; в этом случае, ваш посетитель должен вернуть его глубину вызывающего абонента. Да, он просто возвращает номер он получил от абонента, + 1.
или это не листовой узел. В этом случае она будет иметь 1 или 2 детей. Нам нужно, чтобы получить эти подробные отчеты от наших детей обратно к абоненту, так просто вернуть сумму глубин, возвращенных детьми.
К магии рекурсии число возвращается к посетителю в корне будет суммой глубин всех детей.
Для того, чтобы получить среднюю глубину, вы хотите, чтобы разделить это на количество конечных узлов; который я оставил бы на второй обходе для расчета. Это может быть сделано в одном, но это будет немного сложнее.