Tree - 트리

2022. 5. 16. 11:52·알고리즘(Algorithm)
728x90
반응형

기본적인 트리 자료구조다.

트리는 비선형 자료구조다. 즉, 계층 구조를 이루는 형태

Node: 트리에 데이터를 저장하는 기본 요소

Level: 최상위 노드를 Level 0으로 하였을 때, 하위 Branch로 연결된 노드의 깊이를 나타냄.

Leaf Node(Terminal Node): Child Node가 하나도 없는 노드

Sibling(Brother Node): 동일한 Parent Node를 가진 노드

Depth: Node가 가질 수 있는 최대 Level

 

 

이진 트리와 이진 탐색 트리(Binary Search Tree)

-이진 트리: 노드의 최대 Branch가 2인 트리

-이진 탐색 트리: 왼쪽 노드는 해당 노드보다 작은값, 오른쪽은 큰 값

https://blog.penjee.com/5-gifs-to-understand-binary-search-tree/#binary-search-tree-insertion-node

이진 트리에도 종류가 있다

-포화 이진 트리

모든 레벨의 노드들이 꽉 차 있는 모습의 이진 트리

노드의 개수는 레벨이 h일때 (2^h+1 -1)

-완전 이진 트리

오른쪽 노드들 일부가 연속으로 비어 있는 형태

트리의 높이가 h, 노드가 n개 라면 (n+1)부터 (2^h+1 -1 ) 번의 노드가 비어 있는 형태

-편향 이진 트리

왼쪽은 왼쪽편향, 오른쪽은 오른쪽 편향 이진 트리라고한다.

일반 트리에서 이진트리로 변환하기

이것을 이진트리로 변환해보자

파이썬에서 트리구조 만들기

class Node:
  def __init__(self,data):
      self.left=None
      self.right=None
      self.data=data

      
root =Node(10)
root.left=Node(34)
root.right=Node(89)
root.left.left=Node(45)
root.left.right=Node(50)
    10
    / \
  34   89
 /  \
45  50
      
def preorder(node):
  if node:
    print(node.data)
    preorder(node.left)
    preorder(node.right)
결과는 10 34 45 50 89
    
def inorder(node):
  if node:
    inorder(node.left)
    print(node.data)
    inorder(node.right)
   
결과는 45 34 50 10 89
    
def postorder(node):
  if node:
    postorder(node.left)
    postorder(node.right)
    print(node.data)
    
결과는 45 50 34 89 10

 

 

트리의 운행법

전위 순회법: 자기자신출력 -> 왼쪽 서브트리 -> 오른쪽 서브트리

중위 순회법: 왼쪽 서브트리 -> 자기자신 출력 -> 오른쪽 서브트리

후위 순회법: 왼쪽 서브트리 -> 오른쪽 서브트리 -> 자기자신 출력

 

 

[참고]

https://www.delftstack.com/ko/howto/python/trees-in-python/

 

Python에서 트리 데이터 구조 구현

이 기사에서는 파이썬에서 트리 데이터 구조를 구현하는 방법을 볼 것입니다.

www.delftstack.com

https://www.fun-coding.org/Chapter10-tree.html

 

파이썬과 컴퓨터 사이언스(자료구조): 대표적인 자료구조: 트리 - 잔재미코딩

6. 이진 탐색 트리의 시간 복잡도와 단점¶ 6.1. 시간 복잡도 (탐색시)¶ depth (트리의 높이) 를 h라고 표기한다면, O(h) n개의 노드를 가진다면, $h = log_2{n} $ 에 가까우므로, 시간 복잡도는 $ O(log{n}) $

www.fun-coding.org

 

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

Big O  (0) 2022.06.02
백준 2869번 : 달팽이는 올라가고 싶다  (0) 2022.05.25
백준 1259번 : 팰린드롬 수  (0) 2022.05.06
1181: 단어정렬  (0) 2022.05.06
백준 2581번 : 소수  (0) 2022.04.30
'알고리즘(Algorithm)' 카테고리의 다른 글
  • Big O
  • 백준 2869번 : 달팽이는 올라가고 싶다
  • 백준 1259번 : 팰린드롬 수
  • 1181: 단어정렬
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      리눅스 #입문
      Algorithm
      JS #정규표현식
      오블완
      c++
      Vue #Vue.js #정리
      BaekJoon
      알고리즘
      JS #프로그래머스 #숫자의표현 #알고리즘
      티스토리챌린지
      프로그래머스
      자바스크립트
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      async await #js #문법 #자바스크립트 #비동기
      리눅스
      알고리즘 #Algorithm
      SQL
      JS #JavaScript #프로그래머스 #알고리즘
      Javascript
      JS #javascript #객체 #Object
      JS #클래스
      자바스크립트 #연습문제
      Programmers
      JS #JavaScript #프로그래머스 #카카오
      JavaScript #Set #Collection
      Python #알고리즘
      프로그래머스 #자바스크립트 #JS
      파이썬 #입력 #python #input
      LeetCode #JS #Javascript #Algorithm
      고득점 Kit
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    Tree - 트리
    상단으로

    티스토리툴바

    티스토리툴바