LeetCode - 111. Minimum Depth of Binary Tree
dfs 재귀로 풀이.
위 트리를 재귀형태로 풀면 다음과 같은 순서.
# minDepth(3) = 2
LD = minDepth(9) = 1
# minDepth(9) = 1
LD = minDepth(null) = 0
RD = minDepth(null) = 0
return 1 + Math.max(LD 0, RD 0) = 1;
RD = minDepth(20) = 2
# minDepth(20) = 1
LD = minDepth(15) = 1
#minDepth(15) = 1
LD = minDepth(null) = 0
RD = minDepth(null) = 0
return 1 + Math.max(LD 0, RD 0) = 1;
RD = minDepth(7) = 1
#minDepth(7) = 1
LD = minDepth(null) = 0
RD = minDepth(null) = 0
return 1 + Math.max(LD 0, RD 0) = 1;
return 1 + Math.min(LD 1, RD 1) = 2;
return 1 + Math.min(LD 1, RD 2) = 2;
maxDepth(3)
LD = maxDepth(9) = 1
maxDepth(9) = 1
LD = maxDepth(null) = 0
maxDepth(null)
return 0;
RD = maxDepth(null)
maxDepth(null)
return 0;
return 1 + Math.max(LD 0 , RD 0) = 1
RD = maxDepth(20) = 2
maxDepth(20) = 2
LD = maxDepth(15) = 1
maxDepth(15) = 1
LD = maxDepth(null) = 0
RD = maxDepth(null) = 0
return 1 + Math.max(LD 0, RD 0);
RD = maxDepth(7) = 1
maxDepth(7) = 1
LD = maxDepth(null) = 0
RD = maxDepth(null) = 0
return 1 + Math.max(LD 0 , RD 0);
return 1 + Math.max(LD 1,RD 1) = 2
return 1 + Math.max(LD 1 , RD 2) = 3
위와같은 경우
주의사항은 자식노드 중 한쪽이 null일 때
null인 쪽으로 탐색할 수 없으니, 다른 루트로 탐색해야한다. 따라서, Math.min 최소값이 아닌 Math.max 최대값으로 더해야한다.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxDepth(TreeNode root) {
if(root == null) return 0;
int lD = maxDepth(root.left);
int rD = maxDepth(root.right);
return 1 + Math.max(lD, rD);
}
}
해당 문제는 BFS 탐색하면 더 좋은 결과가 나올 것 같다. 복습시 BFS로 풀기.