문제링크: www.hackerrank.com/challenges/is-binary-search-tree/problem
이진탐색 트리는 왼쪽 서브트리의 모든 값이 노드의 값보다 작고 오른쪽 서브트리의 모든 값은 노드보다 크다
그래서 왼쪽,오른쪽 서브트리의 노드들을 리스트에 담아서 노드의 데이터와 비교하는 방식으로 했다.
해당 내용을 구현하기 위해 어떤 노드의 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;
}
'알고리즘 > 해커랭크' 카테고리의 다른 글
[해커랭크] Insert a node at the head of a linked list (0) | 2021.01.13 |
---|---|
[해커랭크] Inserting a Node Into a Sorted Doubly Linked List (0) | 2021.01.13 |
[해커랭크] Cycle Detection [JAVA] (0) | 2021.01.07 |
[해커랭크] Sparse Arrays [JAVA] (0) | 2021.01.07 |
[해커랭크] Reverse a doubly linked list [JAVA] (0) | 2021.01.07 |