์ถ์ฒ
ChatGPT
Java 1.8 ์์ค ์ฝ๋
์๋ฐ์ TreeSet์ java.util ํจํค์ง์ ํฌํจ๋ ์ ๋ ฌ๋ ์งํฉ์ ๊ตฌํํ ํด๋์ค์ด๋ค. TreeSet์ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ์ข ์ธ ๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree) ๊ตฌ์กฐ๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์์๋ฅผ ์ ์ฅํ ๋ ์๋์ผ๋ก ์ ๋ ฌํด์ค๋ค. ์ด ๋๋ฌธ์ TreeSet์ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฉด์, ํญ์ ์ ๋ ฌ๋ ์์๋ก ์์๋ฅผ ์ ์งํ๋ค.
- ๊ด๋ จ ๊ธ -> [์๋ฃ ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ Binary search Tree, BST
- ๊ด๋ จ ๊ธ -> [์๋ฃ ๊ตฌ์กฐ] ๋ ๋-๋ธ๋ ํธ๋ฆฌ Red-Black Tree
TreeSet์ ์ฃผ์ ํน์ฑ
1. ์ ๋ ฌ๋ ์์
TreeSet์ ๋ด๋ถ์ ์ผ๋ก ์์๋ค์ ์ ๋ ฌ๋ ์์๋๋ก ์ ์ฅํ๋ค. ์์๋ ์ฝ์ ๋ ๋ ์ด๋ฏธ ์ ๋ ฌ๋ ์ํ๋ก ๋ฐฐ์น๋๋ฉฐ, ๊ฒ์, ํ์, ๋ฒ์ ๊ฒ์ ๋ฑ์์ ํจ์จ์ ์ผ๋ก ์๋ํ๋ค.
2. ์ค๋ณต ํ์ฉ ์ํจ
TreeSet์ ์ค๋ณต ์์๋ฅผ ํ์ฉํ์ง ์๋๋ค. ๋ง์ฝ ์ด๋ฏธ ์กด์ฌํ๋ ์์๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ๋ฉด, ๊ธฐ์กด ์์๊ฐ ์ ์ง๋๊ณ ์๋ก ์ถ๊ฐ๋์ง ์๋๋ค.
3. ์ฑ๋ฅ
TreeSet์์ ์ถ๊ฐ, ์ญ์ , ๊ฒ์์ ์ฑ๋ฅ์ ๋ชจ๋ O(log n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ์ด๋ HashSet์ ์์ ์๊ฐ ๋ณต์ก๋(O(1))๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ง๋๋ ์ฅ์ ์ด ์๋ค.
2. TreeSet์ ๋ด๋ถ ๊ตฌํ
1. TreeSet์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
TreeSet์ ๋ด๋ถ์ ์ผ๋ก NavigableMap ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ TreeMap์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. TreeMap์ด ๋ฐ์ดํฐ๋ฅผ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, TreeSet๋ ๋์ผํ ๋ฐฉ์์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๊ณ , ๊ฒ์ ์ฑ๋ฅ์ ์ ์งํ๋ค.
- ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ค์ค๋ก ๊ท ํ์ ์ ์งํ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ด๋ค. ์ฝ์ ๋๋ ์ญ์ ์์ ์ด ๋ฐ์ํ ๋, ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๋ ์ถ๊ฐ ์์ ์ด ๋ฐ์ํ์ง๋ง, ์ด๋ก ์ธํด O(log n)์ ์ฑ๋ฅ์ ๋ณด์ฅํ ์ ์๋ค.
TreeSet ํด๋์ค์ ์ ์ธ
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable {
// ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ TreeMap
private transient NavigableMap<E,Object> m;
// TreeMap์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ ์์. TreeSet์ ์ค์ง ํค๋ง ์ค์ํ๋ฏ๋ก ๋ชจ๋ ๊ฐ์ ๋์ผํ ์์๋ก ์ค์ ๋ฉ๋๋ค.
private static final Object PRESENT = new Object();
// ๊ธฐ๋ณธ ์์ฑ์ (์์ฐ ์ ๋ ฌ)
public TreeSet() {
this(new TreeMap<E,Object>());
}
// Comparator๋ฅผ ๋ฐ๋ ์์ฑ์
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
// ๋ด๋ถ์ ์ผ๋ก TreeMap์ ์ฌ์ฉํ๋ ์์ฑ์
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
// ๊ธฐํ ์ฝ๋ ์๋ต...
}
- ์ ์ฝ๋์์ TreeSet์ NavigableMap<E, Object> ํ์ ์ TreeMap์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. PRESENT๋ผ๋ ์์๋ TreeMap์์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ํ๋ฉด TreeSet์ ํค๋ง ์ค์ํ๊ณ ๊ฐ์ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2. TreeSet์ add ๋ฉ์๋
TreeSet์ add ๋ฉ์๋๋ ๋ด๋ถ์ ์ผ๋ก TreeMap์ put ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์์๋ฅผ ์ถ๊ฐํ๋ค. TreeMap์์ ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ์ค๋ณต๋ ์์๋ ์๋์ผ๋ก ๊ฑฐ๋ถ๋๋ค.
add ๋ฉ์๋ ๊ตฌํ
public boolean add(E e) {
// TreeMap์ put ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์๋ฅผ ์ถ๊ฐ
return m.put(e, PRESENT) == null;
}
- m.put(e, PRESENT)๋ TreeMap์ ์๋ก์ด ํค e๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ์ PRESENT ์์๋ก ์ ์ฅ๋๋ค.
- ๋ง์ฝ ์ถ๊ฐํ๋ ค๋ ํค e๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด put ๋ฉ์๋๋ ๊ธฐ์กด ๊ฐ์ ๋ฐํํ๋ฉฐ, ์๋ก ์ถ๊ฐ๋์ง ์๋๋ค.
- == null ์กฐ๊ฑด์ put ๋ฉ์๋๊ฐ null์ ๋ฐํํ๋์ง ํ์ธํด, ์๋ก ์์๊ฐ ์ถ๊ฐ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ค.
3. TreeSet์ remove ๋ฉ์๋
TreeSet์ remove ๋ฉ์๋๋ ๋ด๋ถ์ ์ผ๋ก TreeMap์ remove ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. TreeMap์์ ํด๋น ํค๋ฅผ ์ฐพ์ ์ ๊ฑฐํ๋ค.
remove ๋ฉ์๋ ๊ตฌํ
public boolean remove(Object o) {
return m.remove(o) == PRESENT;
}
- m.remove(o)๋ TreeMap์์ ํด๋น ํค๋ฅผ ์ฐพ์์ ์ ๊ฑฐํ๊ณ , ์ญ์ ๋ ๊ฐ(์ฆ, PRESNET ์์)์ ๋ฐํํ๋ค.
- ๋ฐํ๋ ๊ฐ์ด PRESENT์ ๊ฐ์ผ๋ฉด, ํด๋น ์์๊ฐ ์กด์ฌํ๊ณ ์ญ์ ๋์์์ ์๋ฏธํ๋ฏ๋ก true๋ฅผ ๋ฐํํ๋ค.
4. ์ ๋ ฌ ๋ฐ ํ์ ๊ด๋ จ ๋ฉ์๋
TreeSet์ ์์๋ค์ด ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅ๋๋ค. ์ด๋ฅผ ์ํด ๋ด๋ถ์ ์ผ๋ก TreeMap์ ์ ๋ ฌ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ค. ์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ค์ํ ํ์ ๋ฉ์๋๊ฐ ๊ฐ๋ฅํ๋ค.
first, last, higher, lower ๋ฉ์๋
public E first() {
return m.firstKey();
}
public E last() {
return m.lastKey();
}
public E higher(E e) {
return m.higherKey(e);
}
public E lower(E e) {
return m.lowerKey(e);
}
- first()์ last() : ํธ๋ฆฌ์์ ๊ฐ์ฅ ์์(์ฒซ ๋ฒ์งธ) ํค์ ๊ฐ์ฅ ํฐ(๋ง์ง๋ง) ํค๋ฅผ ๋ฐํํ๋ค. ์ด๋ค์ ํธ๋ฆฌ์ ์ข์ธก ๋๊ณผ ์ฐ์ธก ๋์ ์์นํ ์์์ด๋ค.
- higher(E e)์ lower(E e): ์ฃผ์ด์ง ํค e๋ณด๋ค ํฐ ์ฒซ ๋ฒ์งธ ์์์ ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค. ์ด๋ ํธ๋ฆฌ์์ ๋ ธ๋๋ฅผ ํ์ํ์ฌ ์์์ ๋ง๋ ๋ค์ ๋๋ ์ด์ ๋ ธ๋๋ฅผ ์ฐพ๋๋ค.
5. ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ TreeMap์ ๋์ ์๋ฆฌ
TreeSet์ด ์ฌ์ฉํ๋ TreeMap์ ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ก ๊ตฌํ๋์ด ์๋ค. ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ ์ด์ง ํ์ ํธ๋ฆฌ์ ์ผ์ ์ผ๋ก ์ฝ์ , ์ญ์ , ํ์ ์์ ์ ํจ์จ์ ์ผ๋ก ์ํํ๋ฉฐ ํญ์ O(log n)์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ค.
TreeMap์ ์ผ๋ถ ๊ตฌํ
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
}
int cmp;
Entry<K,V> parent;
// split comparator and comparable paths
Comparator<? super K> cpr = comparator;
if (cpr != null) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
// comparable key
else {
if (key == null)
throw new NullPointerException();
@SuppressWarnings("unchecked")
Comparable<? super K> k = (Comparable<? super K>) key;
do {
parent = t;
cmp = k.compareTo(t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
Entry<K,V> e = new Entry<>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
parent.right = e;
fixAfterInsertion(e);
size++;
modCount++;
return null;
}
- ์ฝ์ ๊ณผ์ : put ๋ฉ์๋๋ ์๋ก์ด ์์๋ฅผ ์ฝ์ ํ ๋ ํธ๋ฆฌ์ ๋ฃจํธ์์ ์์ํด ๋น๊ต๋ฅผ ํตํด ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก ๋ด๋ ค๊ฐ๋ค. ์ ์ ํ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ์๋ก์ด ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ค.
- ๊ท ํ ์ ์ง : fixAfterInsertion ๋ฉ์๋๋ ๋ ๋-๋ธ๋ ํธ๋ฆฌ์ ๊ท์น์ ๋ฐ๋ผ ํธ๋ฆฌ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ด ๊ท์น์ ์ ์ฉํจ์ผ๋ก์จ ํธ๋ฆฌ๋ ํญ์ ๊ท ํ์ ์ ์งํ๋ฉฐ, ์ฝ์ , ์ญ์ ๋ฑ์ ์์ ์ด O(log n)์ ์๊ฐ ๋ณต์ก๋๋ก ์ฒ๋ฆฌ๋๋ค.
3. TreeSet์ ๋์ ๋ฐฉ์
1. ์์ ์ถ๊ฐ (add ๋ฉ์๋)
TreeSet์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด, ๋ด๋ถ์ ์ผ๋ก TreeMap์ put ๋ฉ์๋๋ฅผ ํตํด ์์๊ฐ ์ถ๊ฐ๋๋ค. ์ด๋, ์์๊ฐ ์ ๋ ฌ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ์ ํ ์์น์ ์ฝ์ ๋๋ค.
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(10);
treeSet.add(20);
treeSet.add(15); // ์๋์ผ๋ก ์ ๋ ฌ๋์ด [10, 15, 20] ์์๋ก ์ ์ฅ๋จ
2. ์์ ์ ๊ฑฐ (remove ๋ฉ์๋)
TreeSet์์ ํน์ ์์๋ฅผ ์ ๊ฑฐํ๋ฉด, ๋ด๋ถ์ ์ผ๋ก TreeMap์์ ํด๋น ์์๋ฅผ ์ญ์ ํด, ํธ๋ฆฌ์ ๊ท ํ์ ์ ์งํ๋ค.
treeSet.remove(15); // ์์ 15๊ฐ ์ญ์ ๋๊ณ , ํธ๋ฆฌ๋ ๋ค์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํจ
3. ์ ๋ ฌ ๊ธฐ์ค
TreeSet์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ค์ ์์ฐ ์์(Natural Ordering)์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ค. ์ฆ, ์์๋ค์ด Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ๋๋ค. ์๋ฅผ ๋ค์ด, Integer๋ String๊ณผ ๊ฐ์ ํด๋์ค๋ ์ด๋ฏธ Comparable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋๋ค.
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Cherry");
// ์ถ๋ ฅ ๊ฒฐ๊ณผ: [Apple, Banana, Cherry]
System.out.println(treeSet);
4. ์ฌ์ฉ์ ์ ์ ์ ๋ ฌ ๊ธฐ์ค
TreeSet์ ์ฌ์ฉ์ ์ ์ Comparator๋ฅผ ์ฌ์ฉํด ์ ๋ ฌ ๊ธฐ์ค์ ๋ณ๊ฒฝํ ์ ์๋ค. TreeSet์ ์์ฑ์์์ Comparator๋ฅผ ์ ๋ฌํ๋ฉฐ, ํด๋น ๋น๊ต ๊ธฐ์ค์ ๋ฐ๋ผ ์์๊ฐ ์ ๋ ฌ๋๋ค.
Comparator<String> reverseOrder = Comparator.reverseOrder();
TreeSet<String> treeSet = new TreeSet<>(reverseOrder);
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Cherry");
// ์ถ๋ ฅ ๊ฒฐ๊ณผ: [Cherry, Banana, Apple] (๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ)
System.out.println(treeSet);
4. TreeSet์ ๋ฉ์๋
- add(E e) : ์ฃผ์ด์ง ์์๋ฅผ ์ถ๊ฐํ๊ณ , ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ๋ค.
- remove(Object o) : ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๋ค.
- first() : ์งํฉ์์ ๊ฐ์ฅ ์์(์ฒซ ๋ฒ์งธ) ์์๋ฅผ ๋ฐํํ๋ค.
- last() : ์งํฉ์์ ๊ฐ์ฅ ํฐ(๋ง์ง๋ง)์์๋ฅผ ๋ฐํํ๋ค.
- higher(E e) : ์ฃผ์ด์ง ์์๋ณด๋ค ํฐ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
- lower(E e) : ์ฃผ์ด์ง ์์๋ณด๋ค ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
- subSet(E fromElement, E toElement) : ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์์๋ค์ ๋ฐํํ๋ค.
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(1);
treeSet.add(2);
treeSet.add(3);
treeSet.add(4);
treeSet.add(5);
// ๋ฒ์ ๊ฒ์
SortedSet<Integer> subset = treeSet.subSet(2, 5); // [2, 3, 4]
System.out.println(subset);
// ๊ฐ์ฅ ์์ ์์
System.out.println(treeSet.first()); // 1
// ๊ฐ์ฅ ํฐ ์์
System.out.println(treeSet.last()); // 5
5. TreeSet์ ์ฅ๋จ์
์ฅ์
1. ์ ๋ ฌ๋ ๋ฐ์ดํฐ ์ ์ง
TreeSet์ ํญ์ ์ ๋ ฌ๋ ์ํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ค. ๋ฐ๋ผ์ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋งค์ฐ ์ ์ฉํ๋ค.
2. ๋ฒ์ ๊ฒ์ ๋ฐ ํ์
subSet, headSet, tailSet ๋ฑ์ ๋ฉ์๋๋ฅผ ํตํด ํน์ ๋ฒ์ ๋ด์ ์์๋ฅผ ์ฝ๊ฒ ๊ฒ์ํ ์ ์๋ค.
3. ์ค๋ณต ํ์ฉ ์ ํจ
์ค๋ณต๋ ์์๋ ์ ์ฅ๋์ง ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์งํฉ์ ํน์ฑ์ ์ ์งํ ์ ์๋ค.
๋จ์
1. ๋๋ฆฐ ์ฝ์ ๋ฐ ์ญ์
TreeSet์ HashSet๊ณผ ๋ฌ๋ฆฌ ์ฝ์ ๊ณผ ์ญ์ ์์ ์์ O(log n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ HashSet์ O(1)์ ๋นํด ๋๋ฆฌ๋ฏ๋ก, ์ ๋ ฌ์ด ํ์ํ์ง ์๋ค๋ฉด HashSet์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค.
2. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
TreeSet์ ๋ด๋ถ์ ์ผ๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์, HashSet๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ ๋ง์ ์ ์๋ค.
6. ๊ฒฐ๋ก
TreeSet์ ์์๋ฅผ ์๋์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ๋ฉด์ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์๋ฐ์ ์ค์ํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ ๋-๋ธ๋ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํจ์จ์ ์ผ๋ก ์ฝ์ , ์ญ์ , ํ์์ ์ํํ๋ค. TreeSet์ ๋ฐ์ดํฐ์ ์ ๋ ฌ์ด ํ์ํ๊ฑฐ๋ ๋ฒ์ ๊ฒ์๊ณผ ๊ฐ์ ์์ ์ด ํ์ฏ๋ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค. ๊ทธ๋ฌ๋ ๋จ์ํ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋น ๋ฅธ ์งํฉ์ด ํ์ํ๋ค๋ฉด HashSet์ด ๋ ๋์ ์ ํ์ผ ์ ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] LinkedList ๊ตฌํ (1) | 2024.09.10 |
---|---|
[Java] HashSet์ load factor (0) | 2024.09.10 |
[์๋ฃ ๊ตฌ์กฐ] ๋ ๋-๋ธ๋ ํธ๋ฆฌ Red-Black Tree (1) | 2024.09.09 |
[์๋ฃ ๊ตฌ์กฐ] ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ Self-Balancing Binary Search Tree (0) | 2024.09.09 |
[์๋ฃ ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ Binary search Tree, BST (0) | 2024.09.09 |