[참고 사이트]
https://gmlwjd9405.github.io/2018/08/12/data-structure-tree.html
https://blog.encrypted.gg/1019
https://velog.io/@orcasuit/%ED%8A%B8%EB%9D%BC%EC%9D%B4-Trie
https://wikidocs.net/193702
데이터 사이의 계층 관계를 표현하는 트리 구조를 알아봅니다. 무방향이면서 사이클이 없는 연결 그래프입니다.
각 노드는 하나의 알파벳 문자를 가지고, 루트에서 임의의 노드까지 경로를 따라가면 해당 경로에 해당하는 문자열을 찾을 수 있습니다.

위와 같은 그림을 트리 구조라고 합니다.
순서 트리: 형제 노드의 순서관계가 있음.
무순서 트리: 형제 노드의 순서관계 없음.
문자열 검색, 자동완성, 문자열 집합 관리에 사용하면 효율적임.
여기서 노드를 스캔하는 방법은 크게 2가지 인데, 그것이 바로 BFS와 DFS이다.
스캔 순서에 따라 전위, 중위, 후위로 나뉜다. (아래 사진 순서의 주의)
이진 트리뿐 아니라 일반 트리도 사용한다.

전위 순회
노드방문 → 왼쪽 자식 → 오른쪽 자식
중위 순회
왼쪽 자식 → 노드 방문 → 오른쪽 자식
후위 순회
왼쪽 자식 → 오른쪽 자식 → 노드 방문
더 큰 크리는 밑에 그림을 참고하자.

class TrieNode:
def __init__(self):
self.children = {}
self.is_end_of_word = False
앞서 보여준 그림같이 노드가 왼쪽 자식과 오른쪽 자식 만을 갖는 트리를 이진트리라고 합니다.
두 개 이하의 자식 노드를 가지면 되므로 자식이 하나 없어도 이진 트리라고 합니다.
완전 이진 트리는 루트부터 아래쪽 레벨로 노드가 가득 차 있고, 같은 레벨 안에서 왼쪽부터 오른쪽으로 노드가 채워져 있는 이진 트리를 완전 이진 트리라고 한다. 채우는 방식은 다음과 같다.
1. 마지막 레벨을 제외하고 모든 레벨에 노드가 가득 차 있다.
2. 마지막 레벨에 한해서 왼쪽부터 오른쪽으로 노드를 채우되 반드시 끝까지 채우지 않아도 된다.(오른쪽 노드는 비어도 된다)
아래와 같은 조건을 만족해야합니다.
즉, 모든 왼쪽 자식들 <= V(부모노드) < 모든 오른쪽 자식들 의 규칙을 따르는 트리입니다.

위와 같이 이진 검색트리에서 중위 순회의 깊이 우선 검색으로 스캔시 키값을 오름차순으로 얻을 수 있음.
이진 탐색 트리를 파이썬으로 구현하는 방법은 다음 벨로그를 참고해보자
https://velog.io/@seanlion/bstimplementation
다음 표는 그래프와 트리의 차이이다.

잘 보고 갑니다~