본문 바로가기
HackerRank

hasPathWithGivenSum

by Doromi 2024. 4. 2.
728x90
반응형

이진 트리에서 특정 합계를 갖는 경로가 있는지 확인하는 문제를 해결하는 함수입니다. 주어진 이진 트리는 각 노드가 정수 값을 가지고 있습니다. 

//
// Binary trees are already defined with this interface:
// class Tree<T> {
//   public T value { get; set; }
//   public Tree<T> left { get; set; }
//   public Tree<T> right { get; set; }
// }
bool solution(Tree<int> t, int s) {
  return hasPathWithGivenSum(t,s);
}
bool hasPathWithGivenSum(Tree<int> t, int s){
  if(t == null) return false;
  
  if(t.left == null && t.right == null  && t.value == s) return true;
  
  bool leftPath = hasPathWithGivenSum(t.left, s-t.value);
  bool rightPath = hasPathWithGivenSum(t.right, s-t.value);
  
  return leftPath || rightPath;
}

기저 사례 확인: 주어진 트리가 비어 있는지 확인하고, 비어 있다면 합계를 갖는 경로가 없으므로 false를 반환합니다.


리프 노드 확인: 현재 노드가 리프 노드이고, 해당 노드의 값이 주어진 합계와 같으면 true를 반환합니다. 이는 경로가 트리의 루트에서 리프까지의 경로이므로, 해당 노드가 합계와 일치하는지 확인하는 것입니다.


재귀적으로 서브트리 탐색: 현재 노드가 리프가 아니라면, 현재 노드의 왼쪽 서브트리와 오른쪽 서브트리에 대해 재귀적으로 hasPathWithGivenSum 함수를 호출하여 경로가 존재하는지 확인합니다. 이 과정에서 현재 노드의 값을 현재 합계에서 빼서 하위 서브트리에 대한 합계를 계산합니다.


결과 반환: 왼쪽 서브트리나 오른쪽 서브트리 중 하나라도 합계를 갖는 경로가 존재한다면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.


만약 함수의 반환 타입이 bool이고, return 문에 a 또는 b를 사용한다면, a 또는 b의 값에 따라 함수는 true 또는 false를 반환할 것입니다.

만약 a가 true이면, 함수는 true를 반환합니다.
만약 b가 true이면, 함수는 true를 반환합니다.
그 외의 경우(즉, a와 b가 모두 false이거나 어느 하나가 null일 때), 함수는 false를 반환합니다.

논리 OR 연산자는 두 피연산자 중 하나라도 true이면 true를 반환하고, 둘 다 false일 때에만 false를 반환합니다.
728x90
반응형

'HackerRank' 카테고리의 다른 글

findProfession  (0) 2024.04.08
isTreeSymmetric  (0) 2024.04.05
Top Competitors(SQL)  (0) 2023.10.20
The Report(SQL)  (0) 2023.10.19
Average Population of Each Continent(SQL)  (0) 2023.10.19