트리 - 스레드 이진 트리
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다.# 해당 게시글에 대한 모든 피드백 환영합니다. // 해당 단원인 '트리'의 목차가 업데이트 될 예정입니다.이전 글: 트리 - 이진 트리의 노드 개수/ 단말 노드 개수/ 높이 구하기 스레드 이진 트리 Threaded Binary Tree스레드 이진 트리가 무엇인지 알기 전에 왜 '스레드 이진트리'가 나오게 되었는지 먼저 생각해보자. 전위/중위/후위/레벨 순회 등 이진트리를 순회할 때 NULL 링크를 만나면 왼쪽 또는 오른쪽 자식 노드가 없음으로 이해해왔다. 즉 NULL 링크(또는 포인터) 는 자식노드의 유무를 알려주는 유일한 도구이다.  그런데, 이러한 NULL 포인터가 이진트리 내에 몇 개가 존재하는지 따..
트리 - 이진 트리의 노드 개수/ 단말 노드 개수/ 높이 구하기
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다. # 해당 게시글에 대한 모든 피드백 환영합니다. // 해당 단원인 '트리'의 목차가 업데이트 될 예정입니다. 이전글: 수식트리(후위표기수식) 이진트리의 노드 개수 구하기 이진트리에서 전체 노드의 개수를 세기 위해서는 모든 노드들을 한 번씩 방문해야 한다. 즉, 노드의 개수를 셀 때도 순회 알고리즘이 사용된다. 그렇다면, 어떤 순회 알고리즘을 사용하는 것이 가장 적합할까? 어떤 노드를 루트로 하는 이진트리의 노드의 개수는, 왼쪽 서브트리의 노드 개수와 오른쪽 서브트리의 노드 개수에 루트 노드의 수 1 을 더해주면 된다. 즉 왼쪽 서브트리 -> 오른쪽 서브트리 -> 루트 노드 순으로 방문하여 셈하는 알고리즘은..
트리 - 수식 트리(후위 표기 수식)
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다. # 해당 게시글에 대한 모든 피드백 환영합니다. // 해당 단원인 '트리'의 목차가 업데이트 될 예정입니다. 이전 글: 트리 - 레벨 순회알고리즘 수식트리 Expression Tree 흔히 우리가 알고 있는 수식을 트리로 표현한 것이다. 수식은 산술연산자와 피연산자로 구성된다. 산술연산자는 트리의 비단말 노드가, 피연산자는 트리의 단말 노드가 되는데, 아래의 예를 보면 이해할 수 있다. 그렇다면, 이러한 수식 트리를 읽어들여서 연산할 수 있어야 한다. 이때 사용되는 것이 스택과 순회 알고리즘이다. 전위, 중위, 후위 순회 알고리즘 중 어느 것을 사용하는가에 따라 읽어들인 수식의 형태가 다른데, 아래의 표를..
트리 - 반복적 순회(전위/중위/후위 순회 스택으로 이해하기)
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다. # 해당 게시글에 대한 모든 피드백 환영합니다. 이전 글: 트리-이진트리 순회 반복적 순회 스택 stack 자료구조와 for문을 이용해 트리를 순회하는 방식이다. 이전까지는 순환 호출을 이용해 순회를 했다면 반복적 순회는 for문과 스택을 이용한다. 전위/중위/후위 순회 모두 반복적 순회를 이용해 구현할 수 있다. 이전 글에서 예시로 들었던 아래의 트리를 이용해 전위/중위/후위 반복적 순회를 모두 살펴보자. 스택 그림만으로 방문 순서 알아내기 *pseudo-code: 프로그래밍 언어는 아니지만 유사한 모양으로 알고리즘의 원리를 설명할때 사용가능 1. 전위 순회 // Pseudo Code preorder_i..
트리 - 이진트리 순회
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다. # 해당 게시글에 대한 모든 피드백 환영합니다. 이전글: 트리-이진트리 정의/성질/분류/표현법 순회 traversal 이진트리에 속하는 모든 노드를 한 번씩 방문하여 노드가 가지고 있는 데이터를 목적에 맞게 처리하는 것 전위 순회(preorder traversal) 중위 순회(inorder traversal) 후위 순회(postorder traversal) 전위 순회 preorder traversal 루트 노드 → 왼쪽 서브트리 → 오른쪽 서브트리 이때 서브트리도 하나의 트리이므로, 그 트리 안에서 위의 과정을 또 거치면 된다. 쉽게 생각하면 왼쪽으로 계속 가다가 막히면 오른쪽으로 가는 방법이다. 예를 들..
트리 - 이진트리 정의/ 성질/ 분류/ 표현법
·
자료구조
# [C언어로 쉽게 풀어쓴 자료구조(천인국)]를 공부하고 주요 내용을 정리하고자 작성하는 글입니다. # 해당 게시글에 대한 모든 피드백 환영합니다. 이전글: 트리-개념/용어정리 이진트리 binary tree 모든 노드가 2개의 서브 트리를 가지고 있는 트리 ※ 단, 서브트리가 공집합일 수 있음. 모든 노드의 차수 ≤ 2 공집합도 이진트리 서브 트리간의 순서 존재: 왼쪽, 오른쪽 성질 n 개의 노드를 가진 이진트리는 (n - 1)개의 간선을 가진다. 트리의 높이 = h → h ≤ 노드의 개수 ≤ 2^h - 1 노드의 개수 = n → ⌈log(n+1)⌉ ≤ 트리의 높이 ≤n * ⌈x⌉ : x 보다 작지 않은 최소의 정수(올림 연산) ex. ⌈2.4⌉ = 3 분류 1. 포화이진트리 full binary tre..