We moeten alle blad nodes te bezoeken en erachter te komen hoe diep ze zijn. Dit suggereert:
Geef je knooppunt-bezoek aan de functie een extra argument. Het moet niet alleen weten waar het heen gaat, maar ook hoe diep het is. Elke keer als het heet, heet het op om dieper te gaan, zodat uw knooppunt bezoeker heeft alleen maar om de diepte nummer het kreeg van de beller te verhogen.
Nu is een van 2 dingen kunnen gebeuren:
Ofwel het knooppunt u gevonden is een blad knooppunt, dat wil zeggen het heeft geen kinderen; in dit geval, uw bezoeker nodig heeft om de diepte terug te keren naar de beller. Ja, het geeft alleen het nummer het kreeg van de beller, + 1.
of het is niet een leaf node. In dat geval zal het 1 of 2 kinderen. We moeten die gedetailleerde rapporten van onze kinderen krijgen een back-up naar de beller, dus gewoon de som van de diepten geretourneerd door de kinderen te laten terugkeren.
Door de magie van recursie, het aantal terug naar bezoeker de wortel zal de som van de diepten van alle kinderen.
Om een gemiddelde diepte te krijgen, wil je deze delen door het aantal blad nodes; wat ik zou verlaten om een tweede traversal te berekenen. Het kan worden gedaan in een, maar het zou een beetje ingewikkelder.