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; }