bst 예제

BST의 실제 예는 무엇입니까? 트리는 검색, 게임 논리, 자동 완성 작업 및 그래픽에 자주 사용됩니다. 이 두 가지 예는 전체 주문인 주문 관계에 의존합니다. 속도. 앞에서 설명한 것처럼 BST는 정렬된 데이터 구조입니다. 삽입 시 노드는 순서대로 배치됩니다. 이 고유의 순서는 빠른 검색을 합니다. 정렬된 배열을 사용하여 이진 검색과 마찬가지로 각 패스에서 정렬할 데이터의 양을 절반으로 줄입니다. 예를 들어 작은 노드 값을 찾고 있다고 가정합니다. 각 패스에서, 우리는 왼쪽 노드를 따라 계속 이동합니다. 이렇게 하면 더 큰 값이 자동으로 절반으로 제거됩니다! 검색 비용에 대한 추정치만 있더라도 이러한 시스템은 평균적으로 조회 속도를 상당히 높일 수 있습니다. 예를 들어 맞춤법 검사기에서 사용되는 영어 단어 의 BST가 있는 경우 텍스트 코포라의 단어 빈도에 따라 나무의 균형을 맞추어 루트 근처와 같은 단어를 나뭇잎 근처에 배치할 수 있습니다. 이러한 트리는 Huffman 나무와 비교할 수 있으며, 이 트리는 조밀한 정보 인코딩을 생성하기 위해 자주 사용하는 항목을 루트 근처에 배치하려고 합니다.

그러나 허프만 트리는 나뭇잎에만 데이터 요소를 저장하므로 이러한 요소를 정렬할 필요가 없습니다. 위의 파괴적인 절차 변형은 트리를 제자리에 수정합니다. 상수 힙 공간만 사용하며 반복 버전에서도 상수 스택 공간을 사용하지만 이전 버전의 트리는 손실됩니다. 또는 다음 Python 예제에서와 같이 삽입된 노드의 모든 상위 항목을 재구성할 수 있습니다. 원래 트리 루트에 대한 참조는 유효하여 트리를 영구 데이터 구조로 만듭니다. 예를 들어 build_binary_tree([1, 2, 3, 4, 5])는 트리를 생성합니다(1(2(3(4))))). 상수 시간은 O(1)입니다. 입력 크기가 크거나 작아도 동일한 시간 내에 작업이 수행됩니다. 예를 들어, 어레이에서 푸시() 및 pop()은 일정한 시간입니다. HashTable에서 값을 찾는 것은 일정한 시간입니다. 모든 경우에 D가 루트가 되면 대체 노드 루트를 다시 만듭니다. 각 노드에서 나타내는 정보는 단일 데이터 요소가 아닌 레코드인 경우가 종종 있습니다.

그러나 시퀀싱을 위해 노드는 연결된 레코드의 일부가 아닌 키에 따라 비교됩니다. 다른 데이터 구조에 비해 이진 검색 트리의 주요 장점은 관련 정렬 알고리즘과 순서가 다른 순회와 같은 검색 알고리즘이 매우 효율적일 수 있다는 것입니다. 또한 코딩하기도 쉽습니다. 모든 노드에 0 또는 2개의 자식이 있는 경우 BST가 가득 찼습니다. 4. 완벽한 BST는 완전하고 완전하며(모든 자식 노드는 동일한 수준에 있고 각 노드에는 왼쪽 및 오른쪽 자식 노드가 있음)입니다. 다음은 일반적인 이진 검색 트리 삽입이 C++의 이진 트리에서 수행되는 방법입니다. 검색에는 깊이 우선과 너비 우선의 두 가지 유형이 있습니다. 너비 우선은 단순히 내려가는 길에 각 수준에서 중지됩니다. 그것은 다음과 같습니다 : 우리는 루트에서 시작, 다음 왼쪽 아이, 오른쪽 아이. 다음 단계로 이동, 왼쪽 자식 다음 오른쪽 자식.