커리어 컵 가이드를 통해 기본 CS 원칙을 통해 충돌 과정을 진행하고 이진 트리의 최소/최대 깊이를 계산하는 예제를 고수합니다. 이것이 내가 거의 모든 예제를 가지고있는 것과 같은 문제이기 때문에 나는 여기에 질문을 게시 할 것이라고 생각했다.이진 트리의 깊이를 계산하는 방법을 이해하십시오
지침은 트리가 균형을 이루고 있는지 확인하는 방법을 구현하는 것입니다. 이를 수행하려면 최소 깊이와 최대 깊이를 비교하여 그 차이가 1보다 크지 않은지 확인해야합니다.이 원리는 이해하는 것처럼 간단합니다. 15 행의 메소드는이를 수행하기위한 것입니다.
그러나 각 도우미 메서드 (maxDepth
및 minDepth
)의 return 문에서 무슨 일이 일어나고 있는지 이해할 수 없습니다. 숫자는 root.left
또는 root.right
에서 어떻게 파생됩니까? 는 Math.max
기능은 단순히 값을 (단지 Node
Object)를 지정하지되고있다 때문에 1
또는 0
이 값/널 노드가, 또는 가정 하는가 따라서 1
하여 리턴 값까지를 증가시키는 Math.max(maxDepth(root.left), maxDepth(root.right)
자체 동일 0
수행 두 노드 모두 null입니까?
는 = 루트는 자녀가 않습니다 minDepth :
그렇다면이 나무의 최소/최대 깊이를 계산하는 데 사용되는 일반적인 과정이다? 예 = minDepth = 1, no = minDepth = 0 (루트가있는 경우)
maxDepth = 루트에서 리프를 가장 멀리 찾을 때까지 두 분기를 순환합니다. 카운터를 유지하여 나뭇잎을 결정하십시오.
1 public static int maxDepth(TreeNode root) {
2 if (root == null) {
3 return 0;
4 }
5 return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
6 }
7
8 public static int minDepth(TreeNode root) {
9 if (root == null) {
10 return 0;
11 }
12 return 1 + Math.min(minDepth(root.left), minDepth(root.right));
13 }
14
15 public static boolean isBalanced(TreeNode root){
16 return (maxDepth(root) - minDepth(root) <= 1);
17 }
그게 내가 따르지 않는 것입니다 : 어떻게'maxDepth (root.left)'가 트리의 깊이를 돌려 주나요? – NealR
@NealR'maxDepth (root.left)'는 루트가 원래 트리의 루트의 왼쪽 아들 인 서브 트리의 최대 깊이를 반환합니다. 재귀에 익숙하지 않다면 익숙해지기까지 시간이 걸릴 것입니다. – Eran
유감스럽게 여기는 것이 유감 스럽지만 그 수 (최대 깊이)는 어떻게 계산됩니까? – NealR