再帰を理解するには、再帰的に考える必要があります。
- 空の木の高さは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であり、そうでなければ、あまりにも冗長になっていたからです。)