>  기사  >  Java  >  AVLTree 클래스 테스트

AVLTree 클래스 테스트

王林
王林원래의
2024-07-25 09:09:31687검색

이 섹션에서는 AVLTree 클래스를 사용하는 예를 제공합니다. 아래 코드는 테스트 프로그램을 제공합니다. 프로그램은 정수 25, 205의 배열로 초기화된 AVLTree를 생성하고(7번째 줄) 11~20행, 24~30행의 요소를 삭제합니다. AVLTreeBST의 하위 클래스이고 BST의 요소는 반복 가능하므로 프로그램은 foreach 루프를 사용하여 35~37행의 모든 ​​요소를 ​​순회합니다. .

package demo;

public class TestAVLTree {

    public static void main(String[] args) {
        // Create an AVL tree
        AVLTree<Integer> tree = new AVLTree<>(new Integer[]{25, 20, 5});
        System.out.print("After inserting 25, 20, 5:");
        printTree(tree);

        tree.insert(34);
        tree.insert(50);
        System.out.print("\nAfter inserting 34, 50:");
        printTree(tree);

        tree.insert(30);
        System.out.print("\nAfter inserting 30");
        printTree(tree);

        tree.insert(10);
        System.out.print("\nAfter inserting 10");
        printTree(tree);

        tree.delete(34);
        tree.delete(30);
        tree.delete(50);
        System.out.print("\nAfter removing 34, 30, 50:");
        printTree(tree);

        tree.delete(5);
        System.out.print("\nAfter removing 5:");
        printTree(tree);

        System.out.print("\nTraverse the elements in the tree: ");
        for (int e: tree) {
            System.out.print(e + " ");
        }
    }

    public static void printTree(BST tree) {
        // Traverse tree
        System.out.print("\nInorder (sorted): ");
        tree.inorder();
        System.out.print("\nPostorder: ");
        tree.postorder();
        System.out.print("\nPreorder: ");
        tree.preorder();
        System.out.print("\nThe number of nodes is " + tree.getSize());
        System.out.println();
    }
}

25, 20, 5를 입력한 후:
중순(정렬): 5 20 25
후주문 : 5 25 20
예약주문: 20 5 25
노드 수는 3

34, 50 삽입 후:
중순(정렬): 5 20 25 34 50
후주문: 5 25 50 34 20
예약주문: 20 5 34 25 50
노드 수는 5

30개 삽입 후
중순(정렬): 5 20 25 30 34 50
후주문: 5 20 30 50 34 25
예약주문: 25 20 5 34 30 50
노드 수는 6

10개를 넣은 후
중순(정렬): 5 10 20 25 30 34 50
후주문: 5 20 10 30 50 34 25
예약주문: 25 10 5 20 34 30 50
노드 수는 7

34, 30, 50을 제거한 후:
중위(정렬): 5 10 20 25
후주문: 5 20 25 10
예약주문: 10 5 25 20
노드 수는 4

5개 제거 후:
중순(정렬): 10 20 25
후주문: 10 25 20
예약주문: 20 10 25
노드 수는 3

트리의 요소 순회: 10 20 25

아래 그림은 트리에 요소가 추가됨에 따라 트리가 어떻게 진화하는지 보여줍니다. 25와 20을 추가하면 아래 그림(a)와 같은 트리가 된다. 아래 그림 (b)와 같이 5가 20의 왼쪽 자식으로 삽입됩니다. 나무의 균형이 맞지 않습니다. 노드 25에서 left-heavy입니다. 아래 그림 (c)와 같이 LL 회전을 수행하여 AVL 트리를 만듭니다.

34를 입력하면 아래 그림(d)와 같은 트리가 표시됩니다. 50을 입력하면 아래 그림(e)와 같은 트리가 된다. 나무의 균형이 맞지 않습니다. 노드 25에서 right-heavy입니다. 아래 그림(f)과 같이 RR 회전을 수행하여 AVL 트리를 만듭니다.

30을 입력하면 아래 그림(g)과 같은 트리가 됩니다. 나무의 균형이 맞지 않습니다. 아래 그림 (h)와 같이 RL 회전을 수행하여 AVL 트리를 만듭니다.

10을 입력하면 아래 그림(i)과 같은 트리가 됩니다. 나무의 균형이 맞지 않습니다. 아래 그림 (j)와 같이 LR 회전을 수행하여 AVL 트리를 만듭니다.

Image description

아래 그림은 요소가 삭제됨에 따라 트리가 어떻게 진화하는지 보여줍니다. 34, 30, 50을 삭제하면 아래 그림(b)와 같은 트리가 된다. 나무의 균형이 맞지 않습니다. 아래 그림 (c)와 같이 LL 회전을 수행하여 AVL 트리를 만듭니다.

5번을 삭제하면 아래 그림(d)와 같은 트리가 됩니다. 나무의 균형이 맞지 않습니다. 아래 그림 (e)와 같이 RL 회전을 수행하여 AVL 트리를 만듭니다

Testing the AVLTree Class

위 내용은 AVLTree 클래스 테스트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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