문제

숫자가 담긴 바이너리서치트리와 타겟번호가 주어졌을때 더했을때 합이 타겟과 일치하는지 boolean으로 리턴시켜라

 

https://leetcode.com/problems/two-sum-iv-input-is-a-bst/

 

Two Sum IV - Input is a BST - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

예제 bst는 링크참조

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean findTarget(TreeNode root, int k) {
       HashSet<Integer> hashs = new HashSet<Integer>();
       return dfs(root,hashs,k);
    }
    
    public boolean dfs (TreeNode root,HashSet<Integer> hash, int k) {
        
        if (root == null) {
            return false;
        }
        
        if (hash.contains (k - root.val)) {
            return true;
        }
        
        hash.add(root.val);
        
        return dfs(root.left,hash,k) || dfs(root.right,hash,k);        
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O(log n)

 

1.노드를 좌측부터 검색해나가면서 hashset에 등록시킨다.

2.재귀로 계속 검색

3.왼쪽 노드가 더이상없을경우 28번줄 return left에서 return이 false가 되며

  오른쪽노드를 검색함 -> 28번줄 right로 이동함.

4.오른쪽도 없을시 false를 리턴하며 이전재귀로 이동하여 left는 false가 되고 다시 오른쪽 노드를 검색함

5.있으면 또 재귀돌면서 왼쪽오른쪽 다 검색한다.

6.이렇게 검색하면서 중간에 hashset에 타겟번호에 현재노드값을 뺀 값이 있는지 확인

7. 있으면 true return이 다 true가 되면서 종료.

8. node a + node b = target t 이므로 target t - node b = node a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts