๐ ๊ฐ์
(1) ์์ ๋ ธ๋ ๊ฐฏ์๊ฐ 2๊ฐ ์ดํ๋ก
(2) ์ผ์ชฝ ์์์ ๋ชจ๋ ๋๋ณด๋ค ๊ฐ์ด ์๊ณ
(3) ์ค๋ฅธ์ชฝ ์์์ ๋ชจ๋ ๋๋ณด๋ค ๊ฐ์ด ํฐ
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์์ ๋ ธ๋ ๋ํ ์ 3๊ฐ์ง ์ฑ์ง์ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ.
When to use?
(1) Local Search
- getNextNode (next Largest key except myself)
- Range Search
ex) 1~100 ไธญ 5~15
(2) Implements Data structure
Set, Binary Heap, Priority Queue
๐จ๐ป Impelment (C++)
์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์๋ฟ๋ง ์๋๋ผ ๋ถ๋ชจ๋ ธ๋์ ์ฐ๊ฒฐ๋ ํต
BST.h
BST.cpp
main.cpp
Key Point (Delete Node)
๊ฐ์ฅ ๊น๋ค๋ก์ด ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆผ๊ณผ ํจ๊ป ์ ๋ฆฌํ๋ค.
void BST::deleteNode(data_t key) {
// (์ค๋ต..)
else if (targetNode->rightChild == nullptr) {
// (์ค๋ต..)
// ๋ถ๋ชจ ๋
ธ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ถ๋ชจ๋ก๋ถํฐ ํฌ์ธํฐ๋ฅผ ์ง์ ์ฐ๊ฒฐ์์ผ์ค์ผํ๋ค.
Node* parentNode = targetNode->parent;
// key point!!
if (parentNode->data > targetNode->data) parentNode->leftChild = targetNode->leftChild;
else parentNode->rightChild = targetNode->leftChild;
if (targetNode->leftChild != nullptr) targetNode->leftChild->parent = parentNode;
// (์ค๋ต..)
} else {
Node* nextNode = getNextNode(targetNode);
targetNode->data = nextNode->data;
// key point!!
nextNode->parent->leftChild = nextNode->rightChild;
if (nextNode->rightChild != nullptr) nextNode->rightChild->parent = nextNode->parent;
// (์ค๋ต..)
}
}
targetNode = targetNode->leftChild
// targetNode ๋์ ์ผ์ชฝ ์์์ด ์๋ฒฝํ๊ฒ ๋์น๋๊ฒ ์ฒ๋ผ ๋ณด์ด์ง๋ง
// targetNode์ ๋ถ๋ชจ๋ ธ๋๋ ์ฌ์ ํ targetNode์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ ํ ์ญ์ ๋์ง ์๋๋ค.
// ๋ฐ๋ผ์ parentNode์ targetNode์ ๋์๊ด๊ณ (์ผ์ชฝ์ ๋ถ๋ชจ? ์ค๋ฅธ์ชฝ ์ ๋ถ๋ชจ?) ๋ฅผ ๋ฐ์ ธ์ ๋ถ๋ชจ๋ ธ๋์์ targetNode์ ์์๋ ธ๋๋ก ํฌ์ธํฐ๋ฅผ ์ด์ด์ค์ผํ๋ค.
Linked List ์์ ํน์ ์์๋ฅผ ์ญ์ ํ ๋๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
has no right child 3๊ฐ์ง ์ผ์ด์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
๋ณธ๋ฌธ ์ฝ๋์ else if ์ ์ ํด๋นํ๋ค.
๋ณธ๋ฌธ ์ฝ๋์ else ์ ์ ํด๋นํ๋ค.
'Algorithm > Algorithm (์ด๋ก )' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] BFS (0) | 2022.09.02 |
---|---|
[Algorithm] Binary search (0) | 2022.09.02 |
[Algorithm] Dijkstra (0) | 2021.02.14 |
[Algorithm] Heap Sort (0) | 2021.02.11 |
[Data Structure] Priority Queue (0) | 2021.02.10 |