Leetcode Java Subtree of Another Tree
업데이트:
문제
코드
class Solution {
public boolean isSubtree(TreeNode root, TreeNode subRoot) {
if ((root == null && subRoot != null) || (root != null && subRoot == null)) {
return false;
} else if (this.isSameTree(root, subRoot)) {
return true;
} else {
return this.isSubtree(root.left, subRoot) || this.isSubtree(root.right, subRoot);
}
}
private boolean isSameTree(TreeNode root, TreeNode subRoot) {
if (root == null || subRoot == null) {
return root == null && subRoot == null;
} else if (root.val == subRoot.val) {
return this.isSameTree(root.left, subRoot.left) && this.isSameTree(root.right, subRoot.right);
} else {
return false;
}
}
}
결과
설명
-
subRoot가 root의 하위 트리인지 검증하는 문제이다.
-
root가 null이고 subRoot가 null이 아니거나, root가 null이 아니고 subRoot가 null이면 하위 트리가 될 수 없는 구성이므로 false를 주어진 문제의 결과로 반환한다.
-
root와 subRoot가 5번에서 정의한 isSameTree(TreeNode root, TreeNode subRoot) 메서드를 만족하는 경우, true를 반환한다.
-
root의 left와 right TreeNode를 이용한 재귀 호출을 수행한 결과가 하나라도 만족하면 true를, 아니면 false를 반환한다.
-
두 TreeNode가 동일한지 검증하기 위한 isSameTree(TreeNode root, TreeNode subRoot) 메서드를 정의한다.
- root와 subRoot 둘 중 하나라도 null인 경우, 둘 다 null인지 여부를 반환한다.
- root의 val 값과 subRoot의 val 값이 동일하면 root와 subRoot의 left와 right TreeNode를 이용하여 재귀 호출한 결과를 반환한다.
- 그 외의 경우 동일하지 않으므로 false를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기