트리를 순회해보자

1 minute read

트리 순회

트리 순회는 루트 노드를 방문하는 순서에 따라 나뉜다.

전위 순회 : 루트 노드를 가장 먼저 방문하는 방법

중위 순회 : 왼쪽 자식을 먼저 방문하고 루트 노드를 방문하는 방법

후위 순회 : 루트 노드를 가장 마지막에 방문하는 방법

재귀용법을 이용해 트리 순회 메소드를 구현해 보았다.

//전위 
public void rootFirstTour(Node curNode) {
    if(curNode==null) {
        return;
    }
    System.out.print(curNode.getValue()+ " ");
    //양쪽 자식이 다 있으면
    if(curNode.left!=null && curNode.right!=null) {
        rootFirstTour(curNode.left);
        rootFirstTour(curNode.right);
        //왼쪽 자식만 있으면
    } else if(curNode.left!=null && curNode.right==null) {
        rootFirstTour(curNode.left);
        //오른쪽 자식만 있으면
    } else if(curNode.left==null && curNode.right!=null) {
        rootFirstTour(curNode.right);
        //자식이 없으면
    } else {
        return;
    }
    return;
}
//중위 순회 
public void leftFirstTour(Node curNode) {
    if(curNode==null) {
        return;
    }
    //양쪽 자식이 다 있으면
    if(curNode.left!=null && curNode.right!=null) {
        leftFirstTour(curNode.left);
        System.out.print(curNode.getValue()+ " ");
        leftFirstTour(curNode.right);
        //왼쪽 자식만 있으면
    } else if(curNode.left!=null && curNode.right==null) {
        leftFirstTour(curNode.left);
        //오른쪽 자식만 있으면
    } else if(curNode.left==null && curNode.right!=null) {
        leftFirstTour(curNode.right);
        //자식이 없으면
    } else {
        System.out.print(curNode.getValue()+ " ");
        return;
    }
    return;
}
//후위 순회
public void rootLastTour(Node curNode) {
    if(curNode==null) {
        return;
    }
    //양쪽 자식이 다 있으면
    if(curNode.left!=null && curNode.right!=null) {
        rootLastTour(curNode.left);
        rootLastTour(curNode.right);
        System.out.print(curNode.getValue()+ " ");
        //왼쪽 자식만 있으면
    } else if(curNode.left!=null && curNode.right==null) {
        rootLastTour(curNode.left);
        //오른쪽 자식만 있으면
    } else if(curNode.left==null && curNode.right!=null) {
        rootLastTour(curNode.right);
        //자식이 없으면
    } else {
        System.out.print(curNode.getValue()+ " ");
        return;
    }
    return;
}