ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조 - 이진트리
    CS/자료구조 2021. 2. 18. 23:03

    이진트리


    트리

    • 노드가 N개인 트리는 N - 1개의 링크를 가진다.

    • 트리의 루트에서 어떤 노드로 가는 경로는 유일하다. 또한 임의 두 노드간의 경로도 유일하다.

     

    이진트리

    • 각 노드는 최대 2개의 자식노드를 가진다.
    • 종류
      1. perfect binary tree
        • 이진 트리의 모든 노드가 꽉 차있는 트리이다.
        • 높이가 h인 perfect binary tree는 2^h - 1개의 노드를 가진다.
      2. full binary tree
        • 이진 트리의 모든 노드가 0개 또는 2개의 자식을 갖는 트리이다.
      3. complete binary tree
        • 이진 트리에서 노드가 왼쪽에서 오른쪽 순서로 순차적으로 존재하는 트리이다.

    • 각 노드는 하나의 데이터 필드와 왼쪽 자식, 오른쪽 자식의 주소를 저장한다.
    • 노드가 N개인 full, complete binary tree의 높이는 logN이다.

     

    이진트리의 순회

    • 순회: 이진 트리의 모든 노드를 방문하는 일.
    • 중순위 순회(Inorder)
        • 왼쪽 자식 트리 방문 -> 루트 방문 -> 오른쪽 자식 트리 방문
        • 구현 with JAVA
      1
      2
      3
      4
      5
      6
      7
      public void Inorder(Node node) {
          if(node != null) {
              Inorder(node.left);
              System.out.println(node.data);
              Inorder(node.right);
          }
      }
      cs

       

    • 선순위 순회(Preorder)
        • 루트 방문 -> 왼쪽 자식 트리 방문 -> 오른쪽 자식 트리 방문
        • 구현 with JAVA
      1
      2
      3
      4
      5
      6
      7
      public void Preorder(Node node) {
          if(node != null) {
              System.out.println(node.data);
              Preorder(node.left);
              Preorder(node.right);
          }
      }
      cs

       

    • 후순위 순회(Postorder)
        • 왼쪽 자식 트리 방문 -> 오른쪽 자식 트리 방문 -> 루트 방문
        • 구현 with JAVA
      1
      2
      3
      4
      5
      6
      7
      public void Postorder(Node node) {
          if(node != null) {
              Postorder(node.left);
              Postorder(node.right);
              System.out.println(node.data);
          }
      }
      cs

       

    • 레벨오더 순회(Level-order)
        • 레벨 순으로 방문. 동일 레벨에서는 왼쪽에서 오른쪽 순서로 방문.
        • queue를 이용하여 구현한다.
        • 구현 with JAVA
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      public void Levelorder(Node node) {
          Queue<Node> q = new LinkedList<>();
          q.add(node);
       
          while(!q.isEmpty()) {
              Node temp = q.poll();
              System.out.println(temp.data);
              if(temp.left != null) q.add(temp.left);
              if(temp.right != null) q.add(temp.right);
          }
      }
      cs

       

     

    reference

    'CS > 자료구조' 카테고리의 다른 글

    자료구조 - 이진검색트리(ALV, RED-BLACK)  (0) 2021.02.21
    자료구조 - 이진검색트리  (0) 2021.02.20
    자료구조 - Heap  (0) 2021.02.18
    자료구조 - Queue  (0) 2021.02.17
    자료구조 - Stack  (0) 2021.02.17

    댓글

Designed by Tistory.