Algorithm/문법 정리

[JAVA] 트리 구현

dbfl9911 2024. 6. 17. 23:12
반응형

자식 노드가 최대 2개인 트리를 이진트리

package Tree;

public class Tree {
    int count; // 트리에 포함된 노드 수 

    public Tree() {
        count = 0;
    }


    public class Node{
        Object data; // 공간에 넣을 숫자
        Node left; // 왼쪽 자식 넣을 공간 (왼쪽 자식 노드)
        Node right; // 오른쪽 자식 넣을 공간

        
        // 초기화
        public Node(Object data) {
            this.data = data;
            left = null;
            right = null;
        }

        // 현재 노드의 좌측에 노드 연결 정보를 추가
        public void addLeft(Node node){
            left = node;
            count++;
        }

        public void addRight(Node node){
            right = node;
            count++;
        }

        //  현재 노드의 좌측 노드 연결 정보를 삭제
        public void deleteLeft(){
            left = null;
            count--;
        }

        public void deleteRight(){
            right = null;
            count--;
        }
    }




    // 데이터 받아 새로운 노드를 생성
    public Node addNode(Object data){
        Node n = new Node(data);
        return n;
    }

    // 전위순회
    public void preOrder(Node node){
        if(node == null) {
            return;
        }

        System.out.println(node.data + " ");
        preOrder(node.left);
        preOrder(node.right);
    }

    // 중위순회
    public void inOrder(Node node){
        if(node == null) {
            return;
        }

        inOrder(node.left);
        System.out.println(node.data + " ");
        inOrder(node.right);
    }

    // 후위순회
    public void postOrder(Node node){
        if(node == null) {
            return;
        }

        postOrder(node.left);
        postOrder(node.right);
        System.out.println(node.data + " ");
    }

    public static void main(String[] args) {
        // 트리 생성
        Tree tree = new Tree();

        // 노드 생성
        Node node1 = tree.addNode(1);
        Node node2 = tree.addNode(2);
        Node node3 = tree.addNode(3);
        Node node4 = tree.addNode(4);
        Node node5 = tree.addNode(5);
        Node node6 = tree.addNode(6);
        Node node7 = tree.addNode(7);

        // 트리 연결관계 생성
		/*  트리 모양       
		 *        1
		 *     2     3
		 *   4  5  6   7
		 */
        node1.addLeft(node2);
        node1.addRight(node3);
        node2.addLeft(node4);
        node2.addRight(node5);
        node3.addLeft(node6);
        node3.addRight(node7);

        tree.preOrder(node1);
        System.out.println();
        tree.inOrder(node1);
        System.out.println();
        tree.postOrder(node1);
        System.out.println();

        node2.deleteLeft(); // 4 삭제
        node3.deleteRight(); // 7 삭제

        /* 삭제 이후 트리 모양
		 *        1
		 *     2     3
		 *      5  6   
		 */

        System.out.println();
        tree.preOrder(node1);
        System.out.println(); // 1 2 5 3 6
    }
}
반응형