Tree Traversal

안녕하세요. 오늘은 이진트리에서 순회하는 방식에 대하여 알아보겠습니다.

다른 List형 자료구조를 출력하는 것과 달리, Tree는 계층적 구조이기 때문에,

그 구조를 글로 표현할 때 일정한 규칙에 따라 표현됩니다.

그리고 그 규칙을 순회라고 부르는데, 오늘 세가지 순회방식을 살펴보겠습니다.


!) 자료구조 Tree를 잘 모르시다면?

Tree 개념설명 보러가기


 

* 본 구현에 사용된 Node, Tree 코드는 글 하단에 있습니다.

 

1) Preorder

전위순회

A - B - D- E- C- F -G

Root부터 시작하여 모든 왼쪽 노드를 순회한 후 오른쪽의 노드를 순회하는 방식입니다.

1
2
3
4
5
6
7
8
9
10
11
 public void preOrder(MyBinNode v) {
        
        System.out.print(v.element()+" ");
        
        if(this.hasLeft(v))
            preOrder(this.left(v));
        
        if(this.hasRight(v))
            preOrder(this.right(v));
        
    }
cs

 

2) Postorder

후위순회

D - E - B - F - G - C -A

맨 왼쪽 아래노드부터 오른쪽 노드를 탐색 후 루트를 마지막으로 방문하는 방식입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public void postOrder(MyBinNode v) {
        
        if(this.hasLeft(v)) {
            System.out.print("(");
            inOrder(this.left(v));
        }
                        
        if(this.hasRight(v)) {
            inOrder(this.right(v));
            System.out.print(")");
        }
        
        System.out.print(v.element()+"");    
    }
cs

 

3) Inorder

중위순화

D - B - E - A - F -C -G

맨 왼쪽 아래노드부터 시작하여 루트, 오른쪽 노드를 순회하는 방식입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public void inOrder(MyBinNode v) {
        
        if(this.hasLeft(v)) {
            System.out.print("(");
            inOrder(this.left(v));
        }
                    
        System.out.print(v.element()+"");        
        
        if(this.hasRight(v)) {
            inOrder(this.right(v));
            System.out.print(")");
        }
    }
cs

 


'Tree + Node'코드 보러가기


Binary Seach Tree 구현을 위해선 트리 순회를 알아야 하기 때문에 간단하게 트리 순회에 대하여 알아보았습니다.

다음시간엔 BST에 관한 글로 찾아 뵙겠습니다. 감사합니다 :)

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기