코린이의 소소한 공부노트

[LeetCode/Easy] 671. Second Minimum Node In a Binary Tree 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 671. Second Minimum Node In a Binary Tree

무지맘 2023. 5. 29. 22:00

1. Input

1) TreeNode root

 

2. Output

1) root의 노드의 값 중 2번째로 작은 수를 반환

2) 만약 그런 값이 없다면 -1을 반환

 

3. Constraint

1) 트리 내의 노드 수의 범위는 [1, 25]이다.

2) 1 <= Node.val <= 2^31 - 1

3) 모든 노드들에 대하여 root.val == min(root.left.val, root.right.val)이 성립한다.

 

4. Example

Input: root = [2,2,5,null,null,5,7] -> Output: 5

Input: root = [2,2,2] -> Output: -1

 

5. Code

1) 첫 코드(2023/05/29)

/**
 * 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 int findSecondMinimumValue(TreeNode root) {
        Queue<TreeNode> q = new LinkedList<>();
        q.add(root);
        int[] nums = new int[2]; // nums[0] < nums[1]
        Arrays.fill(nums, Integer.MAX_VALUE);
        boolean check = false;
        while(!q.isEmpty()){
            TreeNode c = q.remove();
            int x = c.val;
            if(x<nums[0]){
                nums[1] = nums[0];
                nums[0] = x;
            } else if(nums[0]<x && x<=nums[1]){
                check = true;
                nums[1] = x;
            }
            if(c.left!=null)
                q.add(c.left);
            if(c.right!=null)
                q.add(c.right);
        }
        return !check ? -1 : nums[1];
    }
}