Это рекурсивная функция (которая вызывает себя несколько раз). Цель return
состоит в том, чтобы гарантировать, что он не будет пытаться делать это вечно, что приведет к исключению нулевого указателя при запуске из нижней части дерева.
То, что произойдет, это то, что когда вы в первый раз вызываете эту функцию с узлом (обычно, но не всегда, с корневым узлом), она сначала распечатает левое поддерево этого узла, затем значение узла сам, то правое поддерево этого узла.
Способ, которым он печатает поддеревья, заключается в вызове самого себя с помощью узла верхнего уровня этого поддерева. Это очень распространенный метод элегантной обработки рекурсивных структур.
Тест для null
таков, что он имеет условие, при котором поиск вниз по уровням дерева останавливается, когда он достигает узла, у которого нет дочерних элементов на конкретной стороне, которую вы исследуете (слева или справа).
В качестве примера предположим, что у вас есть следующее дерево (заглавные буквы с их номерами являются действительными узлами, а числа являются их значением, а маркеры ===
равны нулю):
A26 Level 0
|
+------+------+
| |
B14 C84 Level 1
| |
+--+--+ +--+--+
| | | |
D11 === === E99 Level 2
| |
+--+--+ +--+--+
| | | |
=== === === === Level 3
Вот что произойдет, когда вы вызовете функцию с помощью A
.
You call the function (level 0) with A.
The function will call itself (level 1) with B (A left).
The function will call itself (level 2) with D (B left).
The function will call itself (level 3) with null (D left).
The function will return to level 2.
The function will print out 11 from D.
The function will call itself (level 3) with null (D right).
The function will return to level 2.
The function will return to level 1.
The function will print out 14 from B.
The function will call itself (level 2) with null (B right).
The function will return to level 1.
The function will return to level 0.
The function will print out 26 from A.
The function will call itself (level 1) with C (A right).
The function will call itself (level 2) with null (C left).
The function will return to level 1.
The function will print out 84 from C.
The function will call itself (level 2) with E (C right).
The function will call itself (level 3) with null (E left).
The function will return to level 2.
The function will print out 99 from E.
The function will call itself (level 3) with null (E right).
The function will return to level 2.
The function will return to level 1.
The function will return to level 0.
The function will return to you.
В результате получается распечатка последовательности DBACE
, которая в отсортированном дереве представляет элементы в отсортированном порядке (11, 14, 26, 84, 99)
.
Или более простая версия, если вы не можете прочитать мое объемное объяснение выше:
A26 Level 0
|
+------+------+
| |
B14 === Level 1
|
+--+--+
| |
=== === Level 2
You call the function (level 0) with A.
The function will call itself (level 1) with B (A left).
The function will call itself (level 2) with null (B left).
The function will return to level 1.
The function will print out 14 from B.
The function will call itself (level 2) with null (B right).
The function will return to level 1.
The function will return to level 0.
The function will print out 26 from A.
The function will call itself (level 1) with null (A right).
The function will return to level 0.
The function will return to you.
В этом случае вы получите BA
или (14,26)
.