Python/자료구조, 알고리즘

자료구조) Binary Tree

나무늘보섬 2023. 11. 28. 18:02

< Binary Search Tree  Binary Tree  Tree Graph  >

Binary Tree (이진 트리)

  • Tree의 종류 중 1개
  • 특징: 모든 노드들이 2개 이하의 자식을 가진다.

Binary Tree의 예시 (출처: Wikipedia)

 

 

 

Binary Tree의 종류

 

 

   1. Full Binary Tree (정 이진트리)

  • 모든 노드가 0 or 2개의 자식 노드를 가짐.

 


 2. Complete Binary Tree (완전 이진 트리)

  • 마지막 Level을 제외하고 모든 레벨이 꽉 채워져 있음
  • 마지막 Level이 꽉 채워져 있지 않으면, 왼쪽부터 채워져 있어야 함. (일반적인 견해)

 

출처: https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.codingninjas.com%2Fstudio%2Fproblems%2Fconstruct-complete-binary-tree_893276&psig=AOvVaw0ULewY3oRsYZNoEvK6eht0&ust=1702278919232000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCLj6kaqphIMDFQAAAAAdAAAAABAD

 

 

 

더보기

< '컴퓨팅 사고력을 기르는 이산수학 개정 3판' , 한빛아카데미 >

 

완전 이진 트리

- 높이가 h일 때, 레벨 0부터 h-1까지의 모든 부모노드의 차수가 2이고, 레벨 h는 레벨 h-1의 왼쪽부터 노드가 2개씩 채워져 있는 트리  (일부 관점에서의 견해)

 

(밑의 사진의 경우, 위 책에선 완전 이진 트리라고 보지 않는다.)

출처: https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.programiz.com%2Fdsa%2Fcomplete-binary-tree&psig=AOvVaw0m3W_A7dqlyTkUUZ13QytH&ust=1702278208980000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCJjZjtCmhIMDFQAAAAAdAAAAABAD

 

 

 


   3. Perfect Binary Tree (포화 이진 트리)

  • 정 이진트리 + 완전 이진 트리
  • 모두 2개의 자식을 가지며, Left Subtree와 Right Subtree의 Level이 같다.

 

 

 

출처: https://www.google.com/url?sa=i&url=https%3A%2F%2Fmath.stackexchange.com%2Fquestions%2F2207518%2Fdetermine-the-depth-and-number-of-node-in-perfect-binary-tree-if-index-number-gi&psig=AOvVaw1psKASaGwa9Pc9OG8Q4HKF&ust=1702278842051000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCKjksv2ohIMDFQAAAAAdAAAAABAD

 

 

 

 


  4. Balanced Binary Tree

  • AVL Tree와 Red-Black Tree가 있음
  • | H(Left) - H(Right) | <= k (k는 보통 1) 

 

 

AVL Tree (노드 옆의 숫자는 Balance Factor)

출처: https://www.google.com/url?sa=i&url=https%3A%2F%2Ftechvidvan.com%2Ftutorials%2Favl-tree-in-data-structure%2F&psig=AOvVaw1zVnj5YzSJC3ixtQ922_hT&ust=1702279067312000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCODBouqphIMDFQAAAAAdAAAAABAH

 

 

Red-Black Tree

출처: https://blog.kakaocdn.net/dna/bMAlpy/btrZxI6OBCh/AAAAAAAAAAAAAAAAAAAAAEAsHzNgO5D6bmPxQinex7RbOTgI5jvjkgB3Ve8fl6SK/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1767193199&allow_ip=&allow_referer=&signature=v5JjIZl76rlHL8upWd6KIO%2F5RvQ%3D

 

 

 

 


Q. 이진 트리의 임의의 레벨 i에서 최대로 갖을 수 있는 노드 수는?

- 최대 노드수: 2^i 개

 

Q. 높이가 h인 이진 트리가 갖을 수 있는 최대 노드 수는?

(단, h를 루트 노드에서 Leaf 노드에 이르는 가장 긴 path에 있는 간선의 수로 정의할 경우)

- <높이가 h인 (E 기준) 포화 이진트리의 최대 노드 수는?> 과 같은 질문

 

- 레벨이 h 일 때, 노드 수를 N(h)라 설정  

  • h=0 일 때, N(0) = 2^0 = 1
  • h=1 일 때, N(1) = 2^0 + 2^1 = 3
  • h=2 일 때, N(2) = 2^0 + 2^1 + 2^2 = 7
  • h=3 일 때, N(3) =  2^0 + 2^1 + 2^2 + 2^3 = 15
  •                     .
  •                     .
  •                     .
  • h = n 일 때, N(n) = 2^0 + 2^1 + 2^2 +...+2^n

따라서 높이가 h 일 때, (이진 트리가 갖을 수 있는 최대 노드의 수) = (초항이 1이고 공비가 2인 등비수열의 합과 동일)

- N(max) = 2^(h+1) - 1

 

 

 

 


Q. 포화 이진 트리의 노드 수가 n이라면, Tree의 높이(h)는?

- 트리의 높이를 h라 하면, n = 2^(h+1) -1 

- h에 대해서 정리하면, 2^h = (n+1) / 2

                                       h = log2 (n+1)  (2는 밑, (n+1)은 진수)

 

-  h = log2 (n+1)  (2는 밑, (n+1)은 진수)

 

 

 

 


Q. Maximum height를 갖는 트리 형태는?

(=  n개의 노드를 갖는 트리들 중 height가 가장 큰것은?)

출처:&nbsp;https://velog.io/@jung0228/%EC%9E%90%EB%A3%8C-%EA%B5%AC%EC%A1%B0%EB%A1%A0-AVL-%ED%8A%B8%EB%A6%AC

 

- 트리 중 불균형 이진 트리인 경우 ->  h = n-1