Jumping Bytes and Hopping Bits
the church of tech
Menu

최적 이진 탐색 트리 예제 August 2, 2019

__getitem__ 메서드를 구현하여 사전에 액세스하는 것처럼 보이는 Python 문을 작성할 수 있습니다. 보시다시피__getitem__ 메서드는 호출 get입니다. 후속 을 찾을 수있는 코드는 아래에 표시되어 있습니다 (목록 11 참조) 당신이 볼 수 있듯이 TreeNode 클래스의 방법입니다. 이 코드는 이진 검색 트리의 동일한 속성을 사용하여 순서가 이동하여 트리의 노드를 가장 작은 것에서 최대 로 인쇄합니다. 후속 프로그램을 찾는 경우는 세 가지입니다: 많은 프로그래밍 언어는 트리 기반 세트 및 맵에 대한 기본 제공 지원을 제공합니다(예: Java의 TreeSet/TreeMap 클래스 및 C++ 표준 템플릿 라이브러리의 집합 및 맵 클래스).하지만 일반적인 사용으로 인해 실제로 무대 뒤에서 일어나는 일과 기본 데이터 구조가 실제로 어떻게 작동하는지 오해하기가 쉽습니다. 이것이 바로 이 기사의 전부입니다. 값 15로 루트 노드를 초기화하여 이진 검색 트리를 만들어 보겠습니다. 이 게시물은 트리 데이터 구조를 더 잘 이해하고 혼란을 명확히하는 데 도움이됩니다. 마지막으로, 우리는 이진 검색 트리에서 가장 어려운 방법에 우리의 관심을 설정, 키의 삭제 (목록 7 참조).

첫 번째 작업은 트리를 검색하여 삭제할 노드를 찾는 것입니다. 트리에 두 개 이상의 노드가 있는 경우 _get 메서드를 사용하여 제거해야 하는 TreeNode를 검색합니다. 트리에 단일 노드만 있는 경우 트리의 루트를 제거하지만 루트의 키가 삭제할 키와 일치하는지 확인해야 합니다. 두 경우 모두 del 연산자가 키를 찾지 못하면 오류가 발생합니다. TreeNode 클래스는 BinarySearchTree 클래스 메서드에서 수행되는 작업을 훨씬 쉽게 만드는 많은 도우미 함수를 제공합니다. 이러한 도우미 함수와 함께 TreeNode의 생성자는 목록 2에 표시됩니다. 목록에서 볼 수 있듯이 이러한 도우미 함수의 대부분은 자식(왼쪽 또는 오른쪽)과 노드가 있는 자식의 종류에 따라 노드를 분류하는 데 도움이 됩니다. 또한 TreeNode 클래스는 각 노드의 특성으로 부모를 명시적으로 추적합니다. del 연산자에 대한 구현에 대해 논의할 때 이것이 중요한 이유를 알 수 있습니다.

우리가 지금 구축 할 알고리즘은 검색을 수행하는 것입니다. 지정된 값(정수 번호)의 경우 이진 검색 트리에서 해당 값이 없거나 없는지 말합니다. 우리는 우리의 이진 트리 노드에 값으로 문자열 `a`를 전달할 수 있습니다. 값, left_child 및 right_child를 인쇄하면 값을 볼 수 있습니다. get을 사용하여 이진 서치트리에 대한 __contains__ 메서드를 작성하여 in 작업을 구현할 수 있습니다.

Categories: Uncategorized