>  기사  >  Java  >  Java에서 처음부터 이진 검색 트리

Java에서 처음부터 이진 검색 트리

WBOY
WBOY원래의
2024-07-17 22:19:03858검색

Binary Search Tree from Scratch in Java

소개
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.left = insertRec(root.left, value);
    } else 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.left = insertRec(root.left, value);
        } else 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;
    }
}

위 내용은 Java에서 처음부터 이진 검색 트리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.