> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 이진 검색 트리를 구현하는 방법

Python에서 이진 검색 트리를 구현하는 방법

WBOY
풀어 주다: 2023-06-10 08:57:13
원래의
1364명이 탐색했습니다.

BST(이진 검색 트리)는 이진 트리를 기반으로 하는 검색 알고리즘입니다. 그 특징은 트리에 있는 각 노드의 왼쪽 하위 트리의 값이 이 노드의 값보다 작은 반면, 오른쪽 하위 트리의 값은 이 노드의 값보다 크다는 것입니다. 따라서 BST 검색 및 삽입 연산의 시간복잡도는 O(logN)이다.

Python에서 이진 검색 트리를 구현하는 방법은 비교적 간단합니다. 왜냐하면 Python에는 두 개의 내장 데이터 구조인 목록과 사전이 있으며 둘 다 이진 트리를 구현하는 데 사용할 수 있기 때문입니다. 여기에서는 리스트를 사용하여 이진 검색 트리를 구현하는 방법을 설명합니다.

먼저 각 노드의 값, 왼쪽 하위 트리 및 오른쪽 하위 트리를 나타내는 노드 클래스를 정의해야 합니다.

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
로그인 후 복사

다음으로 삽입 및 검색이라는 두 가지 메서드가 포함된 이진 검색 트리 클래스를 정의할 수 있습니다. 삽입 방법은 루트 노드부터 시작하여 노드의 값을 하나씩 비교하여 새로 삽입된 값이 현재 노드의 값보다 작으면 계속해서 왼쪽 하위 트리에서 검색합니다. 오른쪽 하위 트리에 있습니다. 노드의 왼쪽(또는 오른쪽) 하위 트리가 비어 있는 것으로 확인되면 삽입할 노드가 이 위치에 배치되어야 함을 의미합니다.

class BinarySearchTree:
    def __init__(self):
        self.root = None
    
    def insert(self, value):
        new_node = Node(value)
        if self.root is None:
            self.root = new_node
        else:
            current_node = self.root
            while True:
                if value <= current_node.value:
                    if current_node.left is None:
                        current_node.left = new_node
                        break
                    else:
                        current_node = current_node.left
                else:
                    if current_node.right is None:
                        current_node.right = new_node
                        break
                    else:
                        current_node = current_node.right
    
    def search(self, value):
        current_node = self.root
        while current_node is not None:
            if value == current_node.value:
                return True
            elif value < current_node.value:
                current_node = current_node.left
            else:
                current_node = current_node.right
        return False
로그인 후 복사

이제 트리를 생성하고 여러 노드를 삽입한 다음 검색 기능을 테스트할 수 있습니다.

bst = BinarySearchTree()
bst.insert(9)
bst.insert(3)
bst.insert(12)
bst.insert(1)
bst.insert(4)
bst.insert(10)
bst.insert(15)

print(bst.search(4))  # True
print(bst.search(7))  # False
로그인 후 복사

이 이진 검색 트리에서 4를 검색하면 True가 반환되고 7에서는 False가 반환되는 것을 볼 수 있습니다. 반환되어 7이 트리에 없음을 나타냅니다.

이진 검색 트리를 구현할 때 몇 가지 문제에 주의해야 합니다. 첫째, 삽입과 탐색 연산의 시간복잡도는 트리의 높이에 따라 달라지므로 실제 연산에서는 트리의 높이를 최대한 작게 유지하는 것이 매우 중요하다. 둘째, 대규모 데이터 세트의 경우 이진 검색 트리가 불균형해져서(즉, 트리보다 목록에 더 가까워짐) 검색 속도가 느려질 수 있으므로 균형 잡힌 이진 검색 트리와 같은 고급 알고리즘이 필요합니다.

위 내용은 Python에서 이진 검색 트리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿