Tree

roach·2020년 12월 20일
0

자료구조

목록 보기
2/2

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);
        // kill Object
        node = null;
    }

    public void validateConnCount(Node parentNode) throws IllegalAccessException {
        if(2 == parentNode.getConnCount()){
            throw new IllegalAccessException("더이상 자식 노드를 추가할 수 없습니다.");
        }
    }



}
  • Tree 에서 연결을 맺고 삭제하고, 유효성을 검증하는 로직을 설정하였다.

Main 로직

작성 후 느낀점

  • 음 솔직히 너무 대충 짠 느낌이 강하다. 근데 1차적으로 기능 구현에 가까 운 수준으로 만해서 그런것 같다. 다음 코딩때는 , 배열을 통한 연결관계 표현 및, 관심사 분리가 이루어져야 할것 같다.
profile
모든 기술에는 고민을

0개의 댓글