트리를 순회하는 3가지 방법 구현하기

Drumj·2024년 3월 27일
0

자료구조

목록 보기
1/6
class Node{
    int data;
    Node left;
    Node right;
}

class Tree {
    Node root;

    void setRoot(Node node) {
        this.root = node;
    }

    Node getRoot() {
        return root;
    }

    Node makeNode(Node left, int data, Node right) {
        Node node = new Node();
        node.data = data;
        node.left = left;
        node.right = right;

        return node;
    }

    //순회
    void inorder(Node node) {
        if (node != null) { // 재귀 호출
            inorder(node.left);
            System.out.print(node.data + " ");
            inorder(node.right);
        }
    }

    void preorder(Node node) {
        if (node != null) {
            System.out.print(node.data + " ");
            preorder(node.left);
            preorder(node.right);
        }
    }

    void postorder(Node node) {
        if (node != null) {
            postorder(node.left);
            postorder(node.right);
            System.out.print(node.data + " ");
        }
    }
}
/* 이렇게 생긴 트리를 순회할 것입니다.
      (1)
     /   \
    (2)  (3)
   /   \
 (4)   (5)

InOrder (Left, Root, Right) : 4 2 5 1 3
PreOrder (Root, Left, Right) : 1 2 4 5 3
PostOrder (Left,Right, Root) : 4 5 2 3 1
*/
public class Test {
    public static void main(String[] args) {
        Tree tree = new Tree();

        //마지막 노드부터 생성
        Node node4 = tree.makeNode(null, 4, null);
        Node node5 = tree.makeNode(null, 5, null);
        Node node2 = tree.makeNode(node4, 2, node5);
        Node node3 = tree.makeNode(null, 3, null);
        Node node1 = tree.makeNode(node2, 1, node3);
        tree.setRoot(node1);

        // 순회 시작
        System.out.println("=== InOrder ===");
        tree.inorder(tree.getRoot());

        System.out.println("\n=== PreOrder ===");
        tree.preorder(tree.getRoot());

        System.out.println("\n=== PostOrder ===");
        tree.postorder(tree.getRoot());
    }
}

Node 와 Tree를 간단하게 직접 구현하고 순회하면서 단순하게 data를 출력하는 형식으로 구현했다.

유튜브를 보고 따라 만들어봤다.

0개의 댓글