소개
BST(이진 검색 트리)는 각 노드가 왼쪽 자식과 오른쪽 자식이라고 하는 최대 2개의 자식을 갖는 이진 트리 유형입니다. 각 노드에 대해 왼쪽 하위 트리에는 노드 값보다 작은 값을 가진 노드만 포함되고 오른쪽 하위 트리에는 노드 값보다 큰 값을 가진 노드만 포함됩니다. BST는 효율적인 검색, 삽입 및 삭제 작업에 사용됩니다.
이진 검색 트리를 사용하는 이유는 무엇입니까?
BST는 다음과 같은 몇 가지 장점을 제공합니다.
효율적인 검색: 검색, 삽입, 삭제의 평균 시간 복잡도는 O(log n)입니다.
동적 항목 집합: 정적 배열과 달리 동적 작업을 지원합니다.
정렬된 요소: BST를 순서대로 순회하면 정렬된 순서로 요소가 생성됩니다.
BST 구축을 위한 단계별 가이드
1단계: 노드 구조 정의
첫 번째 단계는 트리의 노드 구조를 정의하는 것입니다. 각 노드에는 값, 왼쪽 자식에 대한 참조, 오른쪽 자식에 대한 참조라는 세 가지 속성이 있습니다.
public class TreeNode { int value; TreeNode left; TreeNode right; TreeNode(int value) { this.value = value; this.left = null; this.right = null; } }
2단계: 생성자를 사용하여 BST 클래스 생성
다음으로, 트리 루트에 대한 참조와 요소 삽입 방법을 포함하는 BST 클래스를 만듭니다.
public class BinarySearchTree { TreeNode root; public BinarySearchTree() { this.root = null; } }
3단계: 삽입 방법 구현
BST에 요소를 삽입하려면 새 노드의 올바른 위치를 찾아야 합니다. 삽입 방법은 일반적으로 재귀 함수로 구현됩니다.
public void insert(int value) { root = insertRec(root, value); } private TreeNode insertRec(TreeNode root, int value) { // Base case: if the tree is empty, return a new node if (root == null) { root = new TreeNode(value); return root; } // Otherwise, recur down the tree if (value root.value) { root.right = insertRec(root.right, value); } // Return the (unchanged) node pointer return root; }
심상
삽입이 어떻게 작동하는지 더 잘 이해하기 위해 예를 살펴보겠습니다. BST에 50, 30, 70, 20, 40, 60, 80이라는 일련의 숫자를 삽입한다고 가정합니다.
50
50 / 30
50 / \ 30 70
50 / \ 30 70 /
40 삽입:
50 / \ 30 70 / \
60개 삽입
50 / \ 30 70 / \ /
80 삽입:
50 / \ 30 70 / \ / \
전체 코드
BST를 생성하고 요소를 삽입하는 전체 코드는 다음과 같습니다.
public class BinarySearchTree { TreeNode root; public BinarySearchTree() { this.root = null; } public void insert(int value) { root = insertRec(root, value); } private TreeNode insertRec(TreeNode root, int value) { if (root == null) { root = new TreeNode(value); return root; } if (value root.value) { root.right = insertRec(root.right, value); } return root; } // Additional methods for traversal, search, and delete can be added here public static void main(String[] args) { BinarySearchTree bst = new BinarySearchTree(); int[] values = {50, 30, 70, 20, 40, 60, 80}; for (int value : values) { bst.insert(value); } // Add code to print or traverse the tree } } class TreeNode { int value; TreeNode left; TreeNode right; TreeNode(int value) { this.value = value; this.left = null; this.right = null; } }
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3