트리구조란?(Tree Structure)
각 요소가 바로 아래에 있는 하나 이상의 요소에 연결되는 데이터 구조 유형입니다.
1개 이상의 노드를 갖는 노드들의 집합요소 간의 연결을 말하며, 데이터 구조에서 다루는 트리는 일반적으로 꼭대기에 뿌리가 그려져 있으므로 거꾸로 된 트리 라고도 합니다.
소프트웨어 개발을 하면서 자연스레 공부하게 되는 데이터에는 큐(Queue), 버퍼(Buffer), 트리(Tree)등이 있습니다. 큐나 버퍼는 주로 메모리 상에서 관리되는 자료구조의 개념이기 때문에 어렵기도 하고 잘 모르지만, 트리구조는 사용자에게 보여지는 용도로도 많이 쓰이는 개념이어서 사용하는 경우가 많습니다. 그런 만큼 공부가 필요하겠죠?
트리구조는 우리 주위에서 쉽게 접할수 있습니다. 예를 들자면 월드컵 토너먼트 대진표, 집안의 가계도, 회사의 조직도, 윈도우 탐색기 폴더구조와 같은 것들이죠. 개발자들에게는 클래스 하이어라키(Hierarchy)도 트리구조이기 때문에 많이들 익숙하게 다뤄왔을 겁니다.
여기서 트리구조에 대해 설명하는 이유는 프로젝트 중 자주 구현하게 되는 조직도 및 Top Down(특정노드 하위의 모든 노드 가져오기), Bottom Up(특정노드 상위의 모든노드 가져오기)의 구현을 위해 필수적인 트리구조에 대한 이해를 돕기 위함이며, 이 글에서는 그에 맞춰 요약 설명하고 있습니다.
트리구조의 특징
1. 루트가 존재한다.
2. 순환구조를 갖지 않는 비방향성 연결그래프 구조이다.(각 노드들은 루트아래로 각각의 부속트리를 이루며, 순환구조를 띄고있지 않다.)
글로 설명하면 이해가 어렵지만 다음의 그림을 보시면 쉽게 이해가 가실겁니다.
그림1. 트리구조
부모노드(Parent Node) : A는 B의 부모노드입니다. B는 C, E, F의 부모노드입니다.
자식노드(Child Node) : B는 A의 자식노드입니다. C, E, F는 B의 자식노드입니다.
핵심용어 (나무위키 참조)
용어 |
설명 |
루트(Root) |
부모가 없는 최상위 노드, 트리의 시작점 |
노드(Node) |
마디 |
부모노드(Parent Node) |
어떤 노드와 링크로 연결돼 있는 상위노드 |
자식노드(Child Node) |
어떤 노드와 링크로 연결돼 있는 하위노드 |
리프(Leaf) |
자식이 없는 노드 |
깊이(Depth) |
루트에서 시작해 특정노드에 도달하기 위해 거치는 간선의 수 |
레벨(Level) | 노드와 루트사이의 간선의 수+1, 또는 특정 깊이의 노드들의 집합 |
간선(Edge, Link) | 한 노드와 다른노드 사이의 연결선 |
다음 글에서는 트리구조를 이용해서 조직도 데이터를 생성하고 특정노드(조직)의 모든 하위노드(하위조직)을 가져오는 사용자 정의함수(Top Down)를 작성해 보도록 하겠습니다.
프로젝트의 성공을 기원합니다.
2018/12/06 - [MS-SQL] - MSSQL 특정노드의 하위노드 전체 가져오기(Top Down)
2018/12/03 - [MS-SQL] - MSSQL 특정노드의 상위노드 전체 가져오기(Bottom Up)
2018/11/29 - [분류 전체보기] - MSSQL WITH CTE
'MS-SQL' 카테고리의 다른 글
MSSQL 초간단 팁들 (0) | 2019.02.02 |
---|---|
MSSQL 그룹별 최상위 데이터 가져오기 (0) | 2019.01.17 |
MSSQL 특정노드의 하위노드 전체 가져오기(Top Down) (1) | 2018.12.06 |
MSSQL 특정노드의 상위노드 전체 가져오기(Bottom Up) (0) | 2018.12.03 |
MSSQL 데이터 복사, 테이블 복사 SELECT INTO, INSERT SELECT를 이용한 백업 (0) | 2018.11.05 |