Tree
- Tree 형 자료구조는 Parent 와 child 관계로 이루어진다.
- ROOT_NODE 는 Tree 의 최 상단 구조의 Node 를 나타낸다.
- 배열 구조의 단점. 즉, 데이터가 추가되면 한칸 씩 밀어야 되는 비 효율적인 구조를 개선하기 위해 등장한 자료구조
- 부모와 자식간의 연결관계를 표현해야 한다.
기능 설계
- Node 를 생성해야 한다.
- 부모 Node 와 자식 Node 는 연결관계를 지녀야 한다.
- Node 에 Property 로 Child Node 와 Parent Node 를 주는건, 관심사 분리에 맞는 것인가? Tree 에서 진행해야하는 것인가? 일단 Node 의 연결관계로 넣어보자
- 노드 삭제시 childNode 의 parentNode 제거, parentNode 의 childNode 를 제거해준다.
Tree 설계도
Java Code 구현
Node Class
package com.study.tree;
public class Node<T> {
Node parent_node;
Node child_node;
boolean IsExplored;
int connCount;
T value;
public Node(){}
public Node(T value){this.value = value;}
public Node getParent_node() {
return parent_node;
}
public void setParent_node(Node parent_node) {
this.parent_node = parent_node;
}
public Node getChild_node() {
return child_node;
}
public void setChild_node(Node child_node) {
this.child_node = child_node;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public boolean isExplored() {
return IsExplored;
}
public void setExplored(boolean explored) {
IsExplored = explored;
}
public int getConnCount() {
return connCount;
}
public void setConnCount(int connCount) {
this.connCount = connCount;
}
}
- IsExplored 는 나중에 탐색기능에 사용될것 같아 현재 추가해 두었다.
Tree Class
package com.study.tree;
public class Tree<T> {
Node ROOTNODE;
public Tree(T value){ROOTNODE = new Node(value);}
public void add(Node parentNode, Node childNode) throws IllegalAccessException {
this.validateConnCount(parentNode);
parentNode.setChild_node(childNode);
childNode.setParent_node(parentNode);
}
public void remove(Node node){
Node parentNode = node.getParent_node();
Node childeNode = node.getChild_node();
parentNode.setChild_node(null);
childeNode.setParent_node(null);
node = null;
}
public void validateConnCount(Node parentNode) throws IllegalAccessException {
if(2 == parentNode.getConnCount()){
throw new IllegalAccessException("더이상 자식 노드를 추가할 수 없습니다.");
}
}
}
- Tree 에서 연결을 맺고 삭제하고, 유효성을 검증하는 로직을 설정하였다.
Main 로직
작성 후 느낀점
- 음 솔직히 너무 대충 짠 느낌이 강하다. 근데 1차적으로 기능 구현에 가까 운 수준으로 만해서 그런것 같다. 다음 코딩때는 , 배열을 통한 연결관계 표현 및, 관심사 분리가 이루어져야 할것 같다.