572. Subtree of Another Tree
Easy 이고, 예전에 풀어봤었고, tree 문제는 잘 파악만 하면 몇줄 안에 해결되는 문제여서 좀 만만하게 생각하고 풀었는데. 대실패.
- 논리적으로 생각하기보다, 풀었던 기억을 되살리려 했다. Tree 문제의 경우, signature 로 주어진 함수를 자식 node 로 recursive 하게 호출하면 해결되는 문제들을 많이 봐서, 그런식으로 접근하려고 했는데 다양한 edge case 에 번번히 실패
- 그리고 결국 실행이 되긴 했는데 LTE 떠서 실패
recursive 하게 호출 하려면, 그 함수가 정확히 뭘 하는지 구분 해야한다. 이번 문제에선 recursive 하게 호출하되, 두 TreeNode 가 정확히 matching 되는지 체크하는 함수는 또 따로 recursive 로 돌리는것이 관건이었다. 말하자면 2개의 recursiv 함수가 있는 것이다. null 체크를 제외한 주요 호출은 아래처럼 된다.
public boolean isSubtree(TreeNode s, TreeNode t) {
return exactSame(s, t) || isSubtree(s.left, t) || isSubtree(s.right, t);
}
private boolean exactSame(TreeNode s, TreeNode t){if(s.val==t.val){
return exactSame(s.left, t.left) && exactSame(s.right, t.right);
}
return false;
}
Complexity
- tree s 의 node 개수를 S, tree t 의 node 개수를 T 라 한다면, 각각의 s 의 노드를 root 로 하는 subtree가 tree t 와 exactly matching 하는지 확인 하므로, 최악의 경우 O(ST) 가 되는것 같 다.
Comments
Post a Comment