Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

Javascript AVL 트리에 노드 삽입


우리는 AVL 트리에 노드를 삽입하는 방법을 배울 수 있습니다. AVL 트리의 삽입은 BST와 동일하며, 트리 아래로 이동할 때마다 삽입 중에 밸런스 트리라는 추가 단계를 수행하면 됩니다.

이것은 우리가 이전에 이미 본 균형 계수를 계산해야 합니다. 그리고 구성에 따라 적절한 회전 방법을 호출해야 합니다. 위의 설명 덕분에 매우 직관적입니다.

재귀 호출을 위한 클래스 메서드와 도우미 함수를 다시 만듭니다.

예시

insert(data) {
   let node = new this.Node(data);
   // Check if the tree is empty
   if (this.root === null) {
      // Insert as the first element
      this.root = node;
   } else {
      insertHelper(this, this.root, node);
   }
}

도우미 방법

function insertHelper(self, root, node) {
   if (root === null) {
      root = node;
   } else if (node.data < root.data) {
      // Go left!
      root.left = insertHelper(self, root.left, node);
      // Check for balance factor and perform appropriate rotation
      if (root.left !== null && self.getBalanceFactor(root) > 1) {
         if (node.data > root.left.data) {
            root = rotationLL(root);
         } else {
            root = rotationLR(root);
         }
      }
   } else if (node.data > root.data) {
      // Go Right! root.
      right = insertHelper(self, root.right, node);
      // Check for balance factor and perform appropriate rotation
      if (root.right !== null && self.getBalanceFactor(root) < -1) {
         if (node.data > root.right.data) {
            root = rotationRR(root);
         } else {
            root = rotationRL(root);
         }
      }
   }
   return root;
}

를 사용하여 이것을 테스트할 수 있습니다.

예시

let AVL = new AVLTree();

AVL.insert(10);
AVL.insert(15);
AVL.insert(5);
AVL.insert(50);
AVL.insert(3);
AVL.insert(7);
AVL.insert(12);

AVL.inOrder();

출력

이것은 출력을 줄 것입니다 -

3
5
7
10
12
15
50