要理解递归,您必须递归地思考:
- 你可以理解一棵空树的高度为0
- 您可以理解,通用非空树的高度为 1 + 最长子树的高度(可以是从左侧或从右侧开始的子树)
从这里开始,您可以轻松理解代码。如果你画树,你会看到会发生什么。如果你有例如
A
/ \
B C
/ \
D E
height(A)
将返回1 + max(height(B), height(C))
height(B)
将返回1 + max(height(D), height(E))
height(C)
将返回1 + max(height(NULL), height(NULL)) = 1
height(D)
将返回1 + max(height(NULL), height(NULL)) = 1
height(E)
将返回1 + max(height(NULL), height(NULL)) = 1
所以
height(A) = 1 + max(height(B), height(C)) =
= 1 + max(1 + max(height(D),height(E)), 1) =
= 1 + max(1 + 1, 1) = 1 + max(2, 1) = 3
(我省略了调用,height(NULL)
因为它们是微不足道的 0,否则它会太冗长。)