algoalgo-world
algoalgo-world/tree/bst
tree/bst

이진 탐색 트리

종류
이진 탐색 트리
균형
안 맞춘다
평균
O(log n)
최악
O(n)
최악 높이
n - 1
노드마다 더 드는 것
없다

평균과 최악은 찾기 한 번이나 넣기 한 번을 재는 값

언어를 고르면 코드가 열린다

class Node:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None


def insert(node, key):
    if node is None:
        return Node(key)
    if key < node.key:
        node.left = insert(node.left, key)
    else:
        node.right = insert(node.right, key)
    return node


def search(node, key):
    while node is not None:
        if key == node.key:
            return node
        node = node.left if key < node.key else node.right
    return None
function makeNode(key) {
  return { key, left: null, right: null };
}

function insert(node, key) {
  if (node === null) return makeNode(key);
  if (key < node.key) node.left = insert(node.left, key);
  else node.right = insert(node.right, key);
  return node;
}

function search(node, key) {
  while (node !== null) {
    if (key === node.key) return node;
    node = key < node.key ? node.left : node.right;
  }
  return null;
}
typedef struct Node {
    int key;
    struct Node *left, *right;
} Node;

Node* insert(Node* node, int key) {
    if (node == NULL) {
        Node* fresh = calloc(1, sizeof(Node));
        fresh->key = key;
        return fresh;
    }
    if (key < node->key) node->left = insert(node->left, key);
    else node->right = insert(node->right, key);
    return node;
}

Node* search(Node* node, int key) {
    while (node != NULL) {
        if (key == node->key) return node;
        node = key < node->key ? node->left : node->right;
    }
    return NULL;
}
struct Node {
    int key;
    Node* left = nullptr;
    Node* right = nullptr;
};

Node* insert(Node* node, int key) {
    if (node == nullptr) return new Node{key};
    if (key < node->key) node->left = insert(node->left, key);
    else node->right = insert(node->right, key);
    return node;
}

Node* search(Node* node, int key) {
    while (node != nullptr) {
        if (key == node->key) return node;
        node = key < node->key ? node->left : node->right;
    }
    return nullptr;
}
class Node {
    public int Key;
    public Node Left, Right;
    public Node(int key) { Key = key; }
}

static Node Insert(Node node, int key) {
    if (node == null) return new Node(key);
    if (key < node.Key) node.Left = Insert(node.Left, key);
    else node.Right = Insert(node.Right, key);
    return node;
}

static Node Search(Node node, int key) {
    while (node != null) {
        if (key == node.Key) return node;
        node = key < node.Key ? node.Left : node.Right;
    }
    return null;
}
static class Node {
    int key;
    Node left, right;

    Node(int key) { this.key = key; }
}

static Node insert(Node node, int key) {
    if (node == null) return new Node(key);
    if (key < node.key) node.left = insert(node.left, key);
    else node.right = insert(node.right, key);
    return node;
}

static Node search(Node node, int key) {
    while (node != null) {
        if (key == node.key) return node;
        node = key < node.key ? node.left : node.right;
    }
    return null;
}
돌려 보고 코드도 본다