Leetcode Java Two Sum IV - Input is a BST
업데이트:
문제
코드
/**
* 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 boolean findTarget(TreeNode root, int k) {
return this.dfs(root, root, k);
}
private boolean dfs(TreeNode root, TreeNode curr, int k) {
if (curr == null) {
return false;
} else {
return this.search(root, curr, k - curr.val)
|| this.dfs(root, curr.left, k)
|| this.dfs(root, curr.right, k);
}
}
private boolean search(TreeNode root, TreeNode curr, int k) {
if (root == null) {
return false;
} else {
return ((root.val == k) && (root != curr))
|| ((root.val < k) && this.search(root.right, curr, k))
|| ((root.val > k) && this.search(root.left, curr, k));
}
}
}
결과
설명
-
root의 자식 노드들 중 두 TreeNode의 값을 이용해서 k를 만들 수 있는지 검증하는 문제이다.
-
3번에서 정의한 dfs(TreeNode root, TreeNode curr, int k) 메서드에 root를 root와 curr 자리에 넣어 수행한 결과를 주어진 문제의 결과로 반환한다.
- DFS 방식으로 탐색할 dfs(TreeNode root, TreeNode curr, int k) 메서드를 정의한다.
- curr이 null인 경우 수행이 불가능하므로, false를 반환한다.
- 그렇지 않은 경우 아래의 경우 중 하나라도 만족하면 true를, 아니면 false를 반환한다.
- 4번에서 정의한 search(TreeNode root, TreeNode curr, int k) 메서드에 $k - curr.val$를 k 자리에 넣어 수행 결과가 true인 경우.
- curr의 left TreeNode를 이용하여 재귀 호출한 결과가 true인 경우.
- curr의 right TreeNode를 이용하여 재귀 호출한 결과가 true인 경우.
- root 기준으로 탐색하기 위한 search(TreeNode root, TreeNode curr, int k) 메서드를 정의한다.
- root가 null인 경우 수행이 불가능하므로, false를 반환한다.
- 그렇지 않은 경우 아래의 결과 중 하나라도 만족하면 true를, 아니면 false를 반환한다.
- root의 val 값이 k와 동일하고 root와 curr이 다른 경우.
- root의 val 값이 k보다 작고, root의 right TreeNode를 이용하여 재귀 호출한 결과가 true인 경우.
- root의 val 값이 k보다 크고, root의 left TreeNode를 이용하여 재귀 호출한 결과가 true인 경우.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기