이진 검색 트리 반복 삽입

Harshit Jindal 2023년10월12일
  1. BST 반복 삽입 알고리즘
  2. BST 반복 삽입 그림
  3. BST 반복 삽입 구현
  4. BST 반복 삽입 알고리즘 복잡성
이진 검색 트리 반복 삽입

이전 기사 이진 탐색 트리에서 BST에 노드를 삽입하는 재귀 적 접근 방식에 대해 논의했습니다. 이 게시물에서는 BST에 노드를 삽입하는 반복적 인 접근 방식에 대해 설명합니다. 반복 삽입 알고리즘에 추가 공간이 필요하지 않으므로 재귀 방법보다 좋습니다.

BST 반복 삽입 알고리즘

root를 BST의 루트 노드로,key를 삽입하려는 요소로 설정합니다.

  • 삽입 할 노드 생성-toinsert.
  • 두 개의 포인터를 초기화합니다.currroot를 가리키고prev는 null을 가리 킵니다. (curr는 트리를 가로 지르고prev는 트레일을 유지합니다).
  • curr! =NULL동안 다음을 수행합니다.
    • 이전curr로 업데이트하여 추적을 유지합니다.
    • curr->data>key인 경우currcurr->left로 설정하고 오른쪽 하위 트리를 삭제합니다.
    • curr->data<key인 경우currcurr->right로 설정하고 왼쪽 하위 트리를 삭제합니다.
  • prev==NULL이면 트리가 비어 있음을 의미합니다. root노드를 만듭니다.
  • 그렇지 않으면prev->data>key이면prev의 왼쪽에toinsert를 삽입합니다.prev->left =toinsert.
  • 그렇지 않으면prev->data <key 인 경우prev의 오른쪽에toinsert를 삽입하고prev->right =toinsert를 삽입합니다.

BST 반복 삽입 그림

BST 반복 삽입 그림

  • 먼저root노드를 생성하여 BST를 초기화하고 여기에5를 삽입합니다.
  • 35보다 작아서5의 왼쪽에 삽입됩니다.
  • 45보다 작지만3보다 커서3의 오른쪽에 삽입되고4의 왼쪽에 삽입됩니다.
  • 2는 현재 트리에서 가장 작은 요소이므로 가장 왼쪽에 삽입됩니다.
  • 1은 현재 트리에서 가장 작은 요소이므로 가장 왼쪽에 삽입됩니다.
  • 6은 현재 트리에서 가장 큰 요소이므로 가장 오른쪽에 삽입됩니다.

이것이 BST 안에 요소를 삽입하는 방법입니다.

BST 반복 삽입 구현

#include <iostream>
using namespace std;

class Node {
 public:
  int key;
  Node *left, *right;
};

Node *newNode(int item) {
  Node *temp = new Node;
  temp->key = item;
  temp->left = temp->right = NULL;
  return temp;
}

void inorder(Node *root) {
  if (root != NULL) {
    inorder(root->left);
    cout << root->key << " ";
    inorder(root->right);
  }
}

void insert(Node *&root, int key) {
  Node *toinsert = newNode(key);
  Node *curr = root;
  Node *prev = NULL;

  while (curr != NULL) {
    prev = curr;
    if (key < curr->key)
      curr = curr->left;
    else
      curr = curr->right;
  }
  if (prev == NULL) {
    prev = toinsert;
    root = prev;
  }

  else if (key < prev->key)
    prev->left = toinsert;

  else
    prev->right = toinsert;
}

int main() {
  Node *root = NULL;
  insert(root, 5);
  insert(root, 3);
  insert(root, 8);
  insert(root, 6);
  insert(root, 4);
  insert(root, 2);
  insert(root, 1);
  insert(root, 7);
  inorder(root);
}

BST 반복 삽입 알고리즘 복잡성

시간 복잡성

  • 평균 사례

평균적인 경우 BST에 노드를 삽입하는 시간 복잡도는 이진 검색 트리의 높이 정도입니다. 평균적으로 BST의 높이는O(logn)입니다. 형성된 BST가 균형 BST 일 때 발생합니다. 따라서 시간 복잡도는 [Big Theta]:O(logn)의 순서입니다.

  • 베스트 케이스

최상의 경우는 트리가 균형 잡힌 BST 일 때 발생합니다. 삽입의 최상의 경우 시간 복잡도는O(logn)의 순서입니다. 평균 케이스 시간 복잡성과 동일합니다.

  • 최악의 경우

최악의 경우 루트에서 가장 깊은 리프 노드, 즉 트리의 전체 높이h로 이동해야 할 수 있습니다. 트리의 균형이 맞지 않는 경우, 즉 치우친 경우 트리의 높이가n이 될 수 있으므로 삽입 및 검색 작업의 최악의 경우 시간 복잡성은O(n)입니다.

공간 복잡성

반복 삽입 작업의 공간 복잡성은 추가 공간이 필요하지 않기 때문에O(1)입니다.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

관련 문장 - Data Structure

관련 문장 - Binary Tree

관련 문장 - Binary Search Tree