Algorithm_13(Tree)

Jingi·2024년 2월 20일

Python

목록 보기
22/32
post-thumbnail

Tree


Tree의 개념

  • 비선형 구조
  • 원소들 간에 1:n 관계를 가지는 자료구조
  • 원소들 간에 계층관계를 가지는 계층형 자료구조
  • 상위 원소에서 하위 원소로 내려가면서 확장되는 트리(나무)모양의 구조

Tree의 용어 정리

  • 노드 중 최상위 노드를 루트라 한다.
  • 루트의 부 트리를(subtree)라 한다.
  • 노드(node) - 트리의 원소
  • 간선(edge) - 노드를 연결하는 선, 부모 노드와 자식 노드를 연결
  • Root - 트리의 시작 노드
  • sibling node(형제 드) - 같은 부모 노드의 자식 노드들
  • subtree(서브 트리) - 부모 노드와 연결된 간선을 끊었을 때 생성되는 트리
  • 조상 노드 - 간선을 따라 루트 노드까지 이르는 경로에 있는 모든 노드들
  • 자손 노드 - 서브 트리에 있는 하위 레벨의 노드들

차수(degree)

  • 노드의 차수 : 노드에 연결된 자식 노드의 수
    • B의 차수 = 2, C의 차수 = 1
  • 트리의 차수 : 트리에 있는 노드의 차수 중에서 가장 큰 값
    • 트리 T의 차수 = 3
  • 단말 노드(리프 노드) : 차수가 0인 노드, 자식 노드가 없는 노드



이진 트리

  • 모든 노드들이 2개의 서브트리를 갖는 특별한 형태의 트리
  • 각 노드가 자식 노드를 최대한 2개까지만 가질 수 있는 트리
  • Level i 에서 노드의 초대 개수는 2^i 개
    • 왼쪽 자식 노드(left child node)
    • 오른쪽 자식 노드(right child node)

포화 이진 트리

  • 모든 레벨에 노드가 포화상태로 차 있는 이진 트리
  • 높이가 h일 때, 최대의 노드 개수인 (2^(h+1)-1)의 노드를 가진 이진트리
    • 높이 3 : 2^(3+1) - 1 -> 15개의 노드

완전 이진 트리

  • 높이가 h이고 노드 수가 n개 일 때, 포화 이진 트리의 노드 번호 1번부터 n번까지 빈 자리가 없는 이진 트리

편향 이진 트리

  • 높이 h에 대한 최소 개수의 노드를 가지면서 한쪽 방향의 자식 노드만을 가진 이진트리
    • 왼쪽 편향 이진트리
    • 오른쪽 편향 이진트리

순회

  • 트리의 각 노드를 중복되지 않게 전부 방문하는 것을 말하는데 트리는 비 선형 구조이기 때문에 선형구조에서와 같이 선후 연결 관계를 알 수 없다.
  • 3가지 순회
전위순회(preorder tracersal)중위 순회(inorder traversal)후위 순회(postorer traversal)
VLRLVRLRV
부모 노드 방문 후, 자식 노드를 자,우 순서로 방문왼쪽 자식 노드, 부모 노드, 오른쪽 자식 노드 순서로 방문자식 노드를 좌우 순서로 방문한 후, 부모노드로 방문한다.

전위 순회

def preorder_traverse(T) : # 전위 순회
	if T:				   # T is not None
    	visit(T)		   # print(T.item)
        preorder_traverse(T.left) 
        preorder_traverse(T.right)

중위 순회

def inorder_traverse(T) :			# 중위 순회
	if T :							# T is not None
    	inorder_traverse(T.left)
        visit(T)					# print(T.item)
        inorder_traverse(T.right)

후위 순회

def postorder_traverse(T) :			# 후위 순회
	if T:							# T is not None
    	postorder_traverse(T.left)
        postorder_traverse(T.right)
        visit(T)

Example

  • 전위 순회(preorder traversal) : A B E F K D H J
  • 중위 순회(inorder traversal) : E B K F A H D J
  • 후위 순회(postorder traversal) : E K F B H J D A

이진트리의 표현

  • 배열을 이용한 이진 트리의 표현
    • 루트의 번호를 1로 함
    • 레벨 n에 있는 노드에 대하여 왼쪽부터 오른쪽으로 2^n부터 2^(n+1) - 1 까지 번호를 차례로 부여


배열을 이용한 이진 트리 표현의 단점

  • 편향 이진 트리의 경우에 사용하지 않는 배열 원소에 대한 메모리 공간 낭비 발생
  • 트리의 중간에 새로운 노드를 삽입하거나 기존의 노드를 삭제할 경우 배열의 크기 변경 어려워 비효율적

단점 해소를 위한 연결리스트

  • 배열을 이용한 이진 트리의 표현의 단점을 보완하기 위해 연결리스트를 이용하여 트리를 표현할 수 있다.
  • 이진트리의 표현
    • 이진 트리의 모든 노드는 최대 2개의 자식 노드를 가지므로 일정한 구조의 단순 연결리시트 노드를 사용하여 구현

수식트리

  • 수식을 표현하는 이진 트리
  • 수식 이진 트리라고 부르기도 함
  • 연산자는 루트 노드이거나 가지 노드
  • 피연산자는 모두 잎 노드
profile
데이터 분석에서 백엔드까지...

0개의 댓글