tree 의 높이 구하는 알고리듬…이해가…

s 76.***.207.158

이걸 제 머리가 잘 못따라 가는거 같네요.

return 0 // B->left
tree_height(B->right) // NULL
이런 부분에서 브레이크가 걸리네요.

그리고
return 0+1 // A->left
에서 A->left 의 합이 1로 sum이 되어 왜 계속 “저장”이 되는지도 이해가 안가고요. return (sum+1) 부분이 계속 왜 “합해져서 누적”되는지 그 부분이 감이 잘 안오는듯해요.
return 0+1+1 // A->right
return 0+1+1+1 // A
여기서도 마지막으로 A->left 와 A->right의 총합이 어떻게 더해지는거죠? 먼저의 리턴값들은 저장안되고 다 사라져버려야 되는걸로 생각되는데…
그리고 포인터를 리커시브로 전진해가는 방법도 좀 이해가 안가고요. (물론 레프트 리커시브가 먼저 왔으므로 레프트부터 시작은 하는데 왼쪽으로 내려갔다 거슬러올라와서 다시 오른쪽을 훑으면서 다시 A의 오른쪽으로 넘어가는 과정들이 확실히 감이 잡히는건 아니네요. 그 과정에서 리턴값이 계속 더해지는것은 더 헷갈리고. ) root = root->next 는 이해가 가는데, 이걸 리커시브 함수로 해서
f( root) { …. f(root->next) …} 이건 좀 헷갈려요.
root = root->next 는 포인터를 아이터레이티브가 루프안에서 완전 끝에 도달할때까지 계속 전진해나가는걸로 이해하기 어렵지 않은데, 리커시브에서는 리턴 0 을 해버리고 더이상 전진을 안해버릴것처럼(리커시브에서는 어떤 조건이 포인터의 전진을 끝까지 계속하게 만들어주죠? 함수에서 리턴값을 돌려준후에도 계속?) 생각되던지, 포인터의 전진이 끝난건지 아니면 계속 하는지 방향은 어딘지 감잡기가 힘듭니다. 내 말이 두서가 없는거 같네요. 어쨌건 내 혼동을 명확하게 하기위해 더 생각해봐야겠어요. 이런건 사실 서로 얼굴보고 말로 설명해도 상대방을 이해시키기 힘든데, 어쨌든 설명 고맙습니다.