Algorithm

173. Binary Search Tree Iterator

happyMoons 2023. 12. 30. 18:41

문제

왼쪽, 오른쪽 포인터를 가지고 있는 TreeNode 클래스를 생성자 파라미터로 전달받아

next(), hasNext() 메소드 기능을 가지고 있는 BSTIterator 라는 클래스를 구현하는 문제입니다.

 

next() 메소드는 in-order 방식으로 순회했을때 다음 원소를 리턴하고,

hasNext() 메소드는 in-order 방식으로 순회했을때 다음 원소가 있으면 true, 없으면 false 를 리턴해야합니다.  

 

 

문제 풀이 코드

class BSTIterator {

    List<Integer> list;
    int index = 0;

    public BSTIterator(TreeNode root) {
        list = new ArrayList<>();

        inorderToList(root);
    }

    private void inorderToList(TreeNode root) {
        if(root == null) return;

        inorderToList(root.left);
        list.add(root.val);
        inorderToList(root.right);
    }    

    public int next() {
        return list.get(index++);
    }
    
    public boolean hasNext() {
        return list.size() > index;
    }
}

 

 

1. 생성자에 TreeNode 가 주어지면 in-order 방식으로 미리 순회해서 List 에 담습니다. 

2. next() 메소드가 호출되면 index 변수를 활용하여 List 의 0번째 원소 부터 리턴합니다.

3. hasNext() 메소드가 호출되면 index 변수값과 list.size() 비교하여 다음 원소 존재 유무를 리턴합니다.