본문 바로가기

알고리즘/해커랭크

[해커랭크] Is This a Binary Search Tree?

문제링크: www.hackerrank.com/challenges/is-binary-search-tree/problem

 

Is This a Binary Search Tree? | HackerRank

Given the root of a binary tree, you have to tell if it's a binary search tree.

www.hackerrank.com

이진탐색 트리는 왼쪽 서브트리의 모든 값이 노드의 값보다 작고 오른쪽 서브트리의 모든 값은 노드보다 크다

그래서 왼쪽,오른쪽 서브트리의 노드들을 리스트에 담아서 노드의 데이터와 비교하는 방식으로 했다.

해당 내용을 구현하기 위해 어떤 노드의 left와 right를 재귀호출을 통해서 리스트에 담았다. 

public static boolean suc;
    public static ArrayList<Node> solve(Node node){
        ArrayList<Node> left = new ArrayList<Node>();
        ArrayList<Node> right = new ArrayList<Node>();
        if(suc == false){
            return new ArrayList<Node>();
        }
        if(node.left!=null){
            left.addAll(solve(node.left));
        }
        if(node.right!=null){
            right.addAll(solve(node.right));
        }
        
        for(int i=0;i<left.size();i++){
            if(left.get(i).data >= node.data){
                suc=false;
                break;
            }
        }
        for(int i=0;i<right.size();i++){
            if(right.get(i).data <= node.data){
                suc = false;
                break;
            }
        }
        
        left.add(node);
        left.addAll(right);
        return left;
        
    }
    
    boolean checkBST(Node root){
        suc = true;
        solve(root);
        return suc;
    }