320x100
class Node {
int value;
Node left = null;
Node right = null;
Node(int value) {
this.value = value;
}
}
Node 클래스
위와 같은 BST를 만들어보자.
노드 추가
class BinaryTree {
Node head;
void add(Node node) {
Node parent = head;
Node now = head;
while (now != null) {
parent = now;
if (now.value > node.value) {
now = now.left;
} else {
now = now.right;
}
}
if (parent == null) {
head = node;
} else if (parent.value > node.value) {
parent.left = node;
} else {
parent.right = node;
}
}
}
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
BinaryTree bt = new BinaryTree();
bt.add(node3);
bt.add(node2);
bt.add(node1);
bt.add(node5);
bt.add(node6);
bt.add(node4);
노드 찾기
class BinaryTree {
// ...
boolean find(Node node) {
Node now = head;
while (now != null) {
if (now.value == node.value) {
return true;
}
if (now.value > node.value) {
now = now.left;
} else {
now = now.right;
}
}
return false;
}
}
bt.find(new Node(3)); // true
bt.find(new Node(7)); // false
탐색
DFS
class BinaryTree {
// ...
// Preorder
void dfs(Node node) {
if (node == null) {
return;
}
System.out.println(node.value);
dfs(node.left);
dfs(node.right);
}
}
bt.dfs(node3);
// 출력
3
2
1
5
4
6
BFS
class BinaryTree {
// ...
void bfs(Node node) {
Queue<Node> queue = new LinkedList<>();
queue.add(node);
Node now;
while (!queue.isEmpty()) {
now = queue.poll();
System.out.println(now.value);
if (now.left != null) {
queue.add(now.left);
}
if (now.right != null) {
queue.add(now.right);
}
}
}
}
bt.bfs(node3);
// 출력
3
2
5
1
4
6
320x100
'JAVA' 카테고리의 다른 글
[Java] JVM (0) | 2020.12.27 |
---|---|
[Java] 상속(Inheritance) (0) | 2020.12.24 |
[Java] 클래스, 객체 (0) | 2020.12.19 |
[Java] 연결리스트(Linked List), Stack, Queue 구현 (0) | 2020.12.12 |
[Java] Github API 통신 (0) | 2020.12.11 |
댓글