*해결 과정
단일 tree를 찾는 것이 핵심이다. 마찬가지로 void DFS()함수로 매 순간 비교하면서 값이 달라지면 boolean값을 업데이트하는 방법과 계속 초기 함수에서 재귀를 돌면서 정답을 찾는 방식이 있다.
*1번
class Solution {
boolean isSame=true;
public boolean isUnivalTree(TreeNode root) {
if(root==null) return false;
int val = root.val;
DFS(root, val);
return isSame;
}
public void DFS(TreeNode root, int val){
if(root.val != val) {
isSame=false;
return;
}
if(root.left!=null) DFS(root.left,val);
if(root.right!=null) DFS(root.right,val);
}
}
*2번
class Solution {
public boolean isUnivalTree(TreeNode root) {
if(root==null) return true;
if(root.left!=null && root.left.val!=root.val) return false;
if(root.right!=null && root.right.val!=root.val) return false;
return isUnivalTree(root.left) && isUnivalTree(root.right);
}
}
root가 null일 때, 왼쪽과 오른쪽 서브트리에 대한 비교 후 다시 서브트리로 내려가서 재귀를 반복한다.
if(root==null) 경우 true라는 것이 중요한 점!!
반응형
'Algorithm' 카테고리의 다른 글
637 : Average of Levels in Binary Tree ( leetcode / java ) (0) | 2020.10.28 |
---|---|
872 : Leaf-Similar Trees ( leetcode / java ) (0) | 2020.10.28 |
559 : Maximum Depth of N-ary Tree ( leetcode / java ) (0) | 2020.10.28 |
897 : Increasing Order Search Tree ( leetcode / java ) (0) | 2020.10.28 |
700 : Search in a Binary Search Tree ( leetcode / java ) (0) | 2020.10.28 |