เชซเซเชฐเชชเซเชฒเซ
เช เชฒเซเช เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชทเซ เชตเชฟเชถเซ เชเซ. เชฎเซเช เชคเชพเชเซเชคเชฐเชฎเชพเช เชตเชฟเชถเซ เชเช เชฒเซเช เชฒเชเซเชฏเซ เชนเชคเซ
เชตเซเชเซเชท เช เชเช เชกเซเชเชพ เชฎเชพเชณเชเซเช เชเซ เชเซเชฎเชพเช เชงเชพเชฐ เชฆเซเชตเชพเชฐเชพ เชเซเชกเชพเชฏเซเชฒเชพ เชเชพเชเช เซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เชเชชเชฃเซ เชเชนเซ เชถเชเซเช เชเซ เชตเซเชเซเชท เช เชเชฒเซเชเชจเซ เชตเชฟเชถเซเชท เชเซเชธ เชเซ. เช เชนเซเช เชเช เชเชฆเชพเชนเชฐเชฃ เชตเซเชเซเชท เชเซ:
เช เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชท เชจเชฅเซ! เชฌเชงเซเช เชเช เชนเซเช เชณ เชเซ!
เชชเชฐเชฟเชญเชพเชทเชพ
เชฐเซเช
เชตเซเชเซเชท เชฎเซเชณ เชเซเชเชจเซ เชจเซเชก เชเซ. เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เช เชจเซเชก A เชเซ. เชตเซเชเซเชทเชฎเชพเช, เชซเชเซเชค เชเช เช เชฐเชธเซเชคเซ เชฎเซเชณเชฎเชพเชเชฅเซ เช เชจเซเชฏ เชจเซเชก เชคเชฐเชซ เชฒเช เชเช เชถเชเซ เชเซ! เชนเชเซเชเชคเชฎเชพเช, เชเซเชเชชเชฃ เชจเซเชกเชจเซ เช เชจเซเชกเชจเซ เช เชจเซเชฐเซเชช เชธเชฌเชเซเชฐเซเชจเชพ เชฎเซเชณ เชคเชฐเซเชเซ เชเชฃเซ เชถเชเชพเชฏ.
เชฎเชพเชคเชพเชชเชฟเชคเชพ/เชธเชเชคเชพเชจ
เชฐเซเช เชธเชฟเชตเชพเชฏเชจเชพ เชคเชฎเชพเชฎ เชเชพเชเช เซเชฎเชพเช เชฌเชฐเชพเชฌเชฐ เชเช เชงเชพเชฐ เชนเซเชฏ เชเซ เชเซ เชฌเซเชเชพ เชจเซเชก เชคเชฐเชซ เชฆเซเชฐเซ เชเชพเชฏ เชเซ. เชตเชฐเซเชคเชฎเชพเชจ เชจเซเชกเชจเซ เชเชชเชฐเชจเซ เชจเซเชก เชเชนเซเชตเชพเชฏ เชเซ เชชเชฟเชคเซ เช เชจเซเชก. เชตเชฐเซเชคเชฎเชพเชจเชจเซ เชจเซเชเซ เชธเซเชฅเชฟเชค เช เชจเซ เชคเซเชจเซ เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒ เชจเซเชก เชเชนเซเชตเชพเชฏ เชเซ เชตเชเชถเช เช เชจเซเชก. เชเชพเชฒเซ เชเช เชเชฆเชพเชนเชฐเชฃ เชฒเชเช. เชจเซเชก B เชฒเซ, เชชเชเซ เชคเซเชจเชพ เชฎเชพเชคเชพเชชเชฟเชคเชพ เชจเซเชก A เชนเชถเซ, เช เชจเซ เชคเซเชจเชพ เชฌเชพเชณเชเซ เชเชพเชเช เซ D, E เช เชจเซ F เชนเชถเซ.
เชฒเซเชซ
เชเช เชเชพเชเช เชเซ เชเซเชฎเชพเช เชเซเช เชฌเชพเชณเชเซ เชจเชฅเซ เชคเซเชจเซ เชเชพเชกเชจเซเช เชชเชพเชจ เชเชนเซเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชเชพเชเช เซ D, E, F, G, I, J, K เชชเชพเชเชฆเชกเชพ เชนเชถเซ.
เช เชฎเซเชณเชญเซเชค เชชเชฐเชฟเชญเชพเชทเชพ เชเซ. เช เชจเซเชฏ เชตเชฟเชญเชพเชตเชจเชพเช เชชเชเซเชฅเซ เชเชฐเซเชเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ. เชคเซเชฅเซ, เชฆเซเชตเชฟเชธเชเชเซ เชตเซเชเซเชท เช เชเช เชตเซเชเซเชท เชเซ เชเซเชฎเชพเช เชฆเชฐเซเช เชจเซเชกเชฎเชพเช เชฌเซ เชเชฐเชคเชพเช เชตเชงเซ เชฌเชพเชณเชเซ เชนเชถเซ เชจเชนเซเช. เชคเชฎเซ เช เชจเซเชฎเชพเชจ เชฒเชเชพเชตเซเชฏเซเช เชเซ เชคเซเชฎ, เชเชฆเชพเชนเชฐเชฃเชฎเชพเชเชฅเซ เชตเซเชเซเชท เชฆเซเชตเชฟเชธเชเชเซ เชจเชนเซเช เชนเซเชฏ, เชเชพเชฐเชฃ เชเซ เชเชพเชเช เซ B เช เชจเซ H เชฌเซ เชเชฐเชคเชพเช เชตเชงเซ เชฌเชพเชณเชเซ เชงเชฐเชพเชตเซ เชเซ. เช เชนเซเช เชฆเซเชตเชฟเชธเชเชเซ เชตเซเชเซเชทเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชเซ:
เชตเซเชเซเชทเชจเซ เชเชพเชเช เซ เชเซเชเชชเชฃ เชฎเชพเชนเชฟเชคเซ เชธเชฎเชพเชตเซ เชถเชเซ เชเซ. เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชท เช เชฆเซเชตเชฟเชธเชเชเซ เชตเซเชเซเชท เชเซ เชเซเชฎเชพเช เชจเซเชเซเชจเชพ เชเซเชฃเชงเชฐเซเชฎเซ เชเซ:
- เชกเชพเชฌเชพ เช เชจเซ เชเชฎเชฃเชพ เชชเซเชเชพ เชตเซเชเซเชทเซ เชฌเชเชจเซ เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชทเซ เชเซ.
- เชฎเชจเชธเซเชตเซ เชจเซเชก X เชจเชพ เชกเชพเชฌเชพ เชธเชฌเชเซเชฐเซเชจเชพ เชคเชฎเชพเชฎ เชจเซเชกเซเชธเชฎเชพเช เชกเซเชเชพ เชเซ เชฎเซเชฒเซเชฏเซ เชจเซเชก X เชจเชพ เชกเซเชเชพ เชเซ เชฎเซเชฒเซเชฏ เชเชฐเชคเชพ เชเชเชพ เชนเซเชฏ เชเซ.
- เชฎเชจเชธเซเชตเซ เชจเซเชก Xเชจเชพ เชเชฎเชฃเชพ เชธเชฌเชเซเชฐเซเชจเชพ เชคเชฎเชพเชฎ เชจเซเชกเซเชธเชฎเชพเช เชกเซเชเชพ เชเซ เชฎเซเชฒเซเชฏเซ เชจเซเชก Xเชจเซ เช เชกเซเชเชพ เชเซเชจเชพ เชฎเซเชฒเซเชฏ เชเชฐเชคเชพ เชตเชงเชพเชฐเซ เช เชฅเชตเชพ เชธเชฎเชพเชจ เชนเซเชฏ เชเซ.
เชเซ - เชจเซเชกเชจเซ เชเซเชเชฒเซเช เชฒเชพเชเซเชทเชฃเชฟเชเชคเชพ (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเชเชเซเชฏเชพ). เช เชเซ เชเซ เชตเซเชเซเชทเชจเซ เช เชจเซเชฐเซเชช เชเซ เชคเซ เชคเชคเซเชต เชถเซเชงเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชฅเชตเชพ เชฎเชพเชเซ เชเซเชจเซ เชเชฐเซเชฐ เชเซ. เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชท เชเชฆเชพเชนเชฐเชฃ:
เชตเซเชเซเชท เชฆเซเชถเซเชฏ
เชเซเชฎ เชเซเชฎ เชนเซเช เชเชเชณ เชตเชงเซเชถ เชคเซเชฎ, เชนเซเช เชคเชฎเชพเชฐเซ เชธเชฎเชเชจเซ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เชเซเชกเชจเชพ เชเซเชเชฒเชพเช (เชเชฆเชพเช เช เชชเซเชฐเซเชฃ) เชเซเชเชกเชพเช เชธเชพเชฎเซเชฒ เชเชฐเซเชถ. เชธเชเชชเซเชฐเซเชฃ เชเซเชก เชฒเซเชเชจเชพ เช เชเชคเซ เชนเชถเซ.
เชตเซเชเซเชท เชเชพเชเช เซเชฅเซ เชฌเชจเซเชฒเซเช เชเซ. เชจเซเชก เชฎเชพเชณเชเซเช:
public class Node<T> {
private T data;
private int key;
private Node<T> leftChild;
private Node<T> rightChild;
public Node(T data, int key) {
this.data = data;
this.key = key;
}
public Node<T> getLeftChild() {
return leftChild;
}
public Node<T> getRightChild() {
return rightChild;
}
//...ะพััะฐะปัะฝัะต ะผะตัะพะดั ัะทะปะฐ
}
เชฆเชฐเซเช เชจเซเชกเชฎเชพเช เชฌเซ เชฌเชพเชณเชเซ เชนเซเชฏ เชเซ (เชคเซ เชคเชฆเซเชฆเชจ เชถเชเซเชฏ เชเซ เชเซ เชฒเซเชซเซเช เชเชพเชเชฒเซเชก เช เชจเซ/เช เชฅเชตเชพ เชฐเชพเชเช เชเชพเชเชฒเซเชก เชฌเชพเชณเชเซ เชจเชฒ เชนเชถเซ). เชคเชฎเซ เชเชฆเชพเช เชธเชฎเชเซ เชเชฏเชพ เชเซ เชเซ เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชจเชเชฌเชฐ เชกเซเชเชพ เชจเซเชกเชฎเชพเช เชธเชเชเซเชฐเชนเชฟเชค เชกเซเชเชพ เชเซ; เชเซ - เชจเซเชก เชเซ.
เช เชฎเซ เชเชพเชเช เชถเซเชงเซ เชเชพเชขเซ เชเซ, เชนเชตเซ เชเชพเชฒเซ เชตเซเชเซเชทเซ เชตเชฟเชถเซเชจเซ เชธเชฎเชธเซเชฏเชพเช เชตเชฟเชถเซ เชตเชพเชค เชเชฐเซเช. เช เชนเซเช เช เชจเซ เชจเซเชเซ, "เชตเซเชเซเชท" เชถเชฌเซเชฆเชจเซ เช เชฐเซเชฅ เชฆเซเชตเชฟเชธเชเชเซ เชถเซเชง เชตเซเชเซเชทเชจเซ เชเซเชฏเชพเชฒ เชนเชถเซ. เชฆเซเชตเชฟเชธเชเชเซ เชตเซเชเซเชทเชจเซ เชฐเชเชจเชพ:
public class BinaryTree<T> {
private Node<T> root;
//ะผะตัะพะดั ะดะตัะตะฒะฐ
}
เชตเชฐเซเช เชเซเชทเซเชคเซเชฐ เชคเชฐเซเชเซ, เช เชฎเชจเซ เชซเชเซเชค เชตเซเชเซเชทเชจเชพ เชฎเซเชณเชจเซ เชเชฐเซเชฐ เชเซ, เชเชพเชฐเชฃ เชเซ เชฐเซเชเชฎเชพเชเชฅเซ, getLeftChild() เช เชจเซ getRightChild() เชชเชฆเซเชงเชคเชฟเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชคเชฎเซ เชตเซเชเซเชทเชจเชพ เชเซเชเชชเชฃ เชจเซเชก เชชเชฐ เชชเชนเซเชเชเซ เชถเชเซ เชเซ.
เชตเซเชเซเชท เช เชฒเซเชเซเชฐเชฟเชงเชฎเซเชธ
ะะพะธัะบ
เชเชพเชฒเซ เชเชนเซเช เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชเช เชฌเชพเชเชงเซเชฒเซเช เชตเซเชเซเชท เชเซ. เชเซ เชเซ เชตเชกเซ เชคเชคเซเชต เชเซเชตเซ เชฐเซเชคเซ เชถเซเชงเชตเซเช? เชคเชฎเชพเชฐเซ เชเซเชฐเชฎเชถเช เชฎเซเชณเชฎเชพเชเชฅเซ เชเชพเชก เชจเซเชเซ เชเชธเซเชกเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชเชเชฒเชพ เชจเซเชกเชจเซ เชเซ เชธเชพเชฅเซ เชเซเชจเชพ เชฎเซเชฒเซเชฏเชจเซ เชคเซเชฒเชจเชพ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ: เชเซ เชเซ เชเชเชฒเชพ เชจเซเชกเชจเซ เชเซ เชเชฐเชคเชพ เชเชเซ เชนเซเชฏ, เชคเซ เชชเชเซ เชจเซเชกเชจเชพ เชกเชพเชฌเชพ เชตเชเชถเช เชชเชฐ เชเชพเช, เชเซ เชตเชงเซ - เชเชฎเชฃเซ เชฌเชพเชเซเช, เชเซ เชเซ เชธเชฎเชพเชจ เชนเซเชฏ เชคเซ - เชเชเซเชเชฟเชค เชจเซเชก เชฎเชณเซ เชเชตเซ เชเซ! เชธเชเชฌเชเชงเชฟเชค เชเซเชก:
public Node<T> find(int key) {
Node<T> current = root;
while (current.getKey() != key) {
if (key < current.getKey())
current = current.getLeftChild();
else
current = current.getRightChild();
if (current == null)
return null;
}
return current;
}
เชเซ เชตเชฐเซเชคเชฎเชพเชจ เชถเซเชจเซเชฏ เชฌเชจเซ เชเซ, เชคเซ เชชเชเซ เชชเซเชจเชฐเชพเชตเซเชคเซเชคเชฟ เชตเซเชเซเชทเชจเชพ เช เชเชค เชธเซเชงเซ เชชเชนเซเชเชเซ เชเช เชเซ (เชตเซเชเชพเชฐเชฟเช เชธเซเชคเชฐเซ, เชคเชฎเซ เชเชพเชกเชฎเชพเช เช เชธเซเชคเชฟเชคเซเชตเชฎเชพเช เชจ เชนเซเชฏ เชคเซเชตเชพ เชธเซเชฅเชพเชจเซ เชเซ - เชเช เชชเชพเชเชฆเชกเชพเชจเซเช เชฌเชพเชณเช).
เชธเชเชคเซเชฒเชฟเชค เชตเซเชเซเชท เชชเชฐ เชถเซเชง เช เชฒเซเชเซเชฐเชฟเชงเชฎเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพเชจเซ เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซ (เชเช เชตเซเชเซเชท เชเซเชฎเชพเช เชเชพเชเช เซ เชตเชงเซ เชเซ เชเชเชพ เชธเชฎเชพเชจเชฐเซเชชเซ เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ). เชชเชเซ เชถเซเชง เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ O(log(n)), เช เชจเซ เชเชงเชพเชฐ 2 เชฒเชเซเชเชฃเช เชนเชถเซ. เชเซเช: เชเซ เชธเชเชคเซเชฒเชฟเชค เชตเซเชเซเชทเชฎเชพเช n เชคเชคเซเชตเซ เชนเซเชฏ, เชคเซ เชคเซเชจเซ เช เชฐเซเชฅ เช เชเซ เชตเซเชเซเชทเชจเชพ log(n) เชเชงเชพเชฐ 2 เชธเซเชคเชฐเซ เชนเชถเซ. เช เชจเซ เชถเซเชงเชฎเชพเช, เชเชเซเชฐเชจเชพ เชเช เชชเชเชฒเชพ เชฎเชพเชเซ, เชคเชฎเซ เชเช เชธเซเชคเชฐ เชจเซเชเซ เชเชพเช เชเซ.
เชธเชพเชฎเซเชฒ
เชเซ เชคเชฎเซ เชถเซเชงเชจเซ เชธเชพเชฐ เชธเชฎเชเซ เชฒเซเชงเซ เชนเซเชฏ, เชคเซ เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชจเชฟเชตเซเชถเชจเซ เชธเชฎเชเชตเซเช เชฎเซเชถเซเชเซเชฒ เชจเชนเซเช เชนเซเชฏ. เชคเชฎเชพเชฐเซ เชซเชเซเชค เชเชพเชกเชจเชพ เชชเชพเชเชฆเชกเชพ เชชเชฐ เชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เชถเซเชงเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชตเชเชถเชจเชพ เชจเชฟเชฏเชฎเซ เช เชจเซเชธเชพเชฐ) เช เชจเซ เชคเซเชจเชพ เชตเชเชถเช เชฌเชจเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ - เชกเชพเชฌเซ เช เชฅเชตเชพ เชเชฎเชฃเซ, เชเซเชจเชพ เชเชงเชพเชฐเซ. เช เชฎเชฒเซเชเชฐเชฃ:
public void insert(T insertData, int key) {
Node<T> current = root;
Node<T> parent;
Node<T> newNode = new Node<>(insertData, key);
if (root == null)
root = newNode;
else {
while (true) {
parent = current;
if (key < current.getKey()) {
current = current.getLeftChild();
if (current == null) {
parent.setLeftChild(newNode);
return;
}
}
else {
current = current.getRightChild();
if (current == null) {
parent.setRightChild(newNode);
return;
}
}
}
}
}
เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชตเชฐเซเชคเชฎเชพเชจ เชจเซเชก เชเชชเชฐเชพเชเชค, เชตเชฐเซเชคเชฎเชพเชจ เชจเซเชกเชจเชพ เชชเชฟเชคเซ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเซ เชเชฐเซเชฐเซ เชเซ. เชเซเชฏเชพเชฐเซ เชตเชฐเซเชคเชฎเชพเชจ เชจเชฒ เชฌเชจเซ เชเซ, เชคเซเชฏเชพเชฐเซ เชชเซเชฐเซเชจเซเช เชตเซเชฐเซเชเชฌเชฒเชฎเชพเช เชเชชเชฃเชจเซ เชเซเชเชคเซ เชถเซเช เชนเชถเซ.
เชจเชฟเชตเซเชถ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชฆเซเชเซเชคเซ เชฐเซเชคเซ เชถเซเชง - O(log(n)) เชเซเชตเซ เช เชนเชถเซ.
เชเชพเชขเซ เชจเชพเชเชเซ
เชเชพเชขเซ เชจเชพเชเชตเซเช เช เชธเซเชฅเซ เชเชเชฟเชฒ เชเชพเชฎเชเซเชฐเซ เชเซ เชเซ เชตเซเชเซเชท เชธเชพเชฅเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ. เชคเซ เชธเซเชชเชทเซเช เชเซ เชเซ เชธเซ เชชเซเชฐเชฅเชฎ เชคเซ เชคเชคเซเชต เชถเซเชงเชตเชพเชจเซเช เชเชฐเซเชฐเซ เชฐเชนเซเชถเซ เชเซเชจเซ เชเชชเชฃเซ เชฆเซเชฐ เชเชฐเชตเชพ เชเช เชฐเชนเซเชฏเชพ เชเซเช. เชชเชฃ เชชเชเซ เชถเซเช? เชเซ เชเชชเชฃเซ เชคเซเชจเซ เชธเชเชฆเชฐเซเชญ เชเชพเชฒเซ เชจเชฒ เชชเชฐ เชธเซเช เชเชฐเซเช, เชคเซ เชเชชเชฃเซ เชธเชฌเชเซเชฐเซ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซ เชเซเชฎเชพเชตเซเชถเซเช เชเซ เชเซเชจเชพ เชฎเซเชณ เช เชจเซเชก เชเซ. เชเชพเชก เชฆเซเชฐ เชเชฐเชตเชพเชจเซ เชชเชฆเซเชงเชคเชฟเช เชคเซเชฐเชฃ เชเซเชธเซเชฎเชพเช เชตเชนเซเชเชเชพเชฏเซเชฒเซ เชเซ.
เชชเซเชฐเชฅเชฎ เชเซเชธ. เชฆเซเชฐ เชเชฐเชตเชพเชจเชพ เชจเซเชกเชฎเชพเช เชเซเช เชฌเชพเชณเชเซ เชจเชฅเซ.
เชเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเชพ เชจเซเชกเชฎเชพเช เชเซเช เชฌเชพเชณเชเซ เชจเชฅเซ, เชคเซ เชคเซเชจเซ เช เชฐเซเชฅ เช เชเซ เชคเซ เชเช เชชเชฐเซเชฃ เชเซ. เชคเซเชฅเซ, เชคเชฎเซ เชคเซเชจเชพ เชชเซเชฐเซเชจเซเชเชจเชพ เชฒเซเชซเซเช เชเชพเชเชฒเซเชก เช เชฅเชตเชพ เชฐเชพเชเช เชเชพเชเชฒเซเชก เชซเซเชฒเซเชกเซเชธเชจเซ เชเชพเชฒเซ เชชเชฐ เชธเซเช เชเชฐเซ เชถเชเซ เชเซ.
เชฌเซเชเซ เชเซเชธ. เชฆเซเชฐ เชเชฐเชตเชพเชจเชพ เชจเซเชกเชฎเชพเช เชเช เชฌเชพเชณเช เชเซ
เช เชเซเชธ เชชเชฃ เชฌเชนเซ เชฎเซเชถเซเชเซเชฒ เชจเชฅเซ. เชเชพเชฒเซ เชเชชเชฃเชพ เชเชฆเชพเชนเชฐเชฃ เชชเชฐ เชชเชพเชเชพ เชเชเช. เชงเชพเชฐเซ เชเซ เชเชชเชฃเซ เชเซ 14 เชธเชพเชฅเซ เชเช เชเชเชเชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชธเชเชฎเชค เชฅเชพเช เชเซ เชคเซ เชเซ 10 เชตเชพเชณเชพ เชจเซเชกเชจเซเช เชเชฎเชฃเซเช เชฌเชพเชณเช เชเซ, เชคเซ เชคเซเชจเชพ เชเซเชเชชเชฃ เชตเชเชถเช (เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เชเชฎเชฃเซ เชฌเชพเชเซ) เชชเชพเชธเซ 10 เชเชฐเชคเชพ เชฎเซเชเซ เชเซ เชนเชถเซ, เชคเซเชฅเซ เชคเซเชจเซ เชตเซเชเซเชทเชฎเชพเชเชฅเซ เชธเชฐเชณเชคเชพเชฅเซ "เชเชพเชชเซ" เชถเชเชพเชฏ เชเซ, เช เชจเซ เชฎเชพเชคเชพเชชเชฟเชคเชพเชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเซเชฒ เชจเซเชกเชจเชพ เชฌเชพเชณเช เชธเชพเชฅเซ เชธเซเชงเชพ เช เชเชจเซเชเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซ. i. เชจเซเชกเชจเซ เชเซ 10 เชฅเซ เชจเซเชก 13 เชธเชพเชฅเซ เชเซเชกเซ. เชเซ เชเชชเชฃเซ เชจเซเชก เชเชพเชขเซ เชจเชพเชเชตเซ เชนเซเชฏ เชคเซ เชคเซเชจเชพ เชชเซเชฐเซเชจเซเชเชจเซเช เชกเชพเชฌเซเช เชฌเชพเชณเช เชนเซเชฏ เชคเซ เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟ เชธเชฎเชพเชจ เชนเชถเซ. เชคเชฎเชพเชฐเชพ เชฎเชพเชเซ เชคเซเชจเชพ เชตเชฟเชถเซ เชตเชฟเชเชพเชฐเซ - เชเช เชเซเชเซเชเชธ เชธเชพเชฎเซเชฏเชคเชพ.
เชคเซเชฐเซเชเซ เชเซเชธ. เชจเซเชกเชจเซ เชฌเซ เชฌเชพเชณเชเซ เชเซ
เชธเซเชฅเซ เชฎเซเชถเซเชเซเชฒ เชเซเชธ. เชเชพเชฒเซ เชเช เชจเชตเซเช เชเชฆเชพเชนเชฐเชฃ เชเซเชเช.
เช เชจเซเชเชพเชฎเซ เชฎเชพเชเซ เชถเซเชงเซ
เชเชพเชฒเซ เชเชนเซเช เชเซ เชเชชเชฃเซ เชเซ เชตเชกเซ เชจเซเชกเชจเซ เชฆเซเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ 25. เชคเซเชจเซ เชเชเซเชฏเชพเช เชเซเชจเซ เชฎเซเชเซเชถเซเช? เชคเซเชจเชพ เช เชจเซเชฏเชพเชฏเซเชเชฎเชพเชเชฅเซ เชเช (เชตเชเชถเชเซ เช เชฅเชตเชพ เชตเชเชถเชเซเชจเชพ เชตเชเชถเชเซ) เชฌเชจเชตเซเช เชเชตเชถเซเชฏเช เชเซ เช เชจเซเชเชพเชฎเซ(เชเซ เชฆเซเชฐ เชเชฐเซเชฒ เชจเซเชกเชจเซเช เชธเซเชฅเชพเชจ เชฒเซเชถเซ).
เชคเชฎเซ เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฃเซ เชเซ เชเซ เช เชจเซเชเชพเชฎเซ เชเซเชฃ เชนเซเชตเซเช เชเซเชเช? เชธเชพเชนเชเชฟเช เชฐเซเชคเซ, เช เชตเซเชเซเชทเชฎเชพเช เชจเซเชก เชเซ เชเซเชจเซ เชเซ เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเชคเชพ เชจเซเชกเชฎเชพเชเชฅเซ เชชเชเซเชจเซ เชธเซเชฅเซ เชฎเซเชเซ เชเซ. เช เชฒเซเชเซเชฐเชฟเชงเชฎ เชจเซเชเซ เชฎเซเชเชฌ เชเซ. เชคเชฎเชพเชฐเซ เชคเซเชจเชพ เชเชฎเชฃเชพ เชฌเชพเชณเช เชชเชฐ เชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (เชนเชเชฎเซเชถเชพ เชเชฎเชฃเซ เชฌเชพเชเซเช, เชเชพเชฐเชฃ เชเซ เชคเซ เชชเชนเซเชฒเชพเชฅเซ เช เชเชนเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช เชเซ เช เชจเซเชเชพเชฎเซเชจเซ เชเชพเชตเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชฎเชพเช เชเชตเชคเซ เชจเซเชกเชจเซ เชเซ เชเชฐเชคเชพเช เชฎเซเชเซ เชเซ), เช เชจเซ เชชเชเซ เช เชเชฎเชฃเชพ เชฌเชพเชณเชเชจเชพ เชกเชพเชฌเชพ เชฌเชพเชณเชเซเชจเซ เชธเชพเชเชเชณเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชพเช. เชเชฆเชพเชนเชฐเชฃเชฎเชพเช, เชเชชเชฃเซ เชเซ 35 เชตเชกเซ เชจเซเชก เชชเชฐ เชจเซเชตเชฟเชเซเช เชเชฐเชตเซเช เชชเชกเชถเซ, เช เชจเซ เชชเชเซ เชคเซเชจเชพ เชกเชพเชฌเชพ เชฌเชพเชณเชเซเชจเซ เชธเชพเชเชเชณ เชจเซเชเซ เชชเชฐเซเชฃ เชคเชฐเชซ เชเชตเซ เชชเชกเชถเซ - เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เช เชธเชพเชเชเชณเชฎเชพเช เชซเชเซเชค เชเซ 30 เชธเชพเชฅเซ เชจเซเชกเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ. เชธเชเชค เชฐเซเชคเซ เชเชนเซเช เชคเซ, เช เชฎเซ เชเชเซเชเชฟเชค เชจเซเชก เชเชฐเชคเชพ เชฎเซเชเชพ เชจเซเชกเชจเชพ เชธเชฎเซเชนเชฎเชพเช เชธเซเชฅเซ เชจเชพเชจเซ เชจเซเชก เชถเซเชงเซ เชฐเชนเซเชฏเชพ เชเซเช.
เช
เชจเซเชเชพเชฎเซ เชถเซเชง เชชเชฆเซเชงเชคเชฟ เชเซเชก:
public Node<T> getSuccessor(Node<T> deleteNode) {
Node<T> parentSuccessor = deleteNode;//ัะพะดะธัะตะปั ะฟัะตะตะผะฝะธะบะฐ
Node<T> successor = deleteNode;//ะฟัะตะตะผะฝะธะบ
Node<T> current = successor.getRightChild();//ะฟัะพััะพ "ะฟัะพะฑะตะณะฐััะธะน" ัะทะตะป
while (current != null) {
parentSuccessor = successor;
successor = current;
current = current.getLeftChild();
}
//ะฝะฐ ะฒัั
ะพะดะต ะธะท ัะธะบะปะฐ ะธะผะตะตะผ ะฟัะตะตะผะฝะธะบะฐ ะธ ัะพะดะธัะตะปั ะฟัะตะตะผะฝะธะบะฐ
if (successor != deleteNode.getRightChild()) {//ะตัะปะธ ะฟัะตะตะผะฝะธะบ ะฝะต ัะพะฒะฟะฐะดะฐะตั ั ะฟัะฐะฒัะผ ะฟะพัะพะผะบะพะผ ัะดะฐะปัะตะผะพะณะพ ัะทะปะฐ
parentSuccessor.setLeftChild(successor.getRightChild());//ัะพ ะตะณะพ ัะพะดะธัะตะปั ะทะฐะฑะธัะฐะตั ัะตะฑะต ะฟะพัะพะผะบะฐ ะฟัะตะตะผะฝะธะบะฐ, ััะพะฑั ะฝะต ะฟะพัะตัััั ะตะณะพ
successor.setRightChild(deleteNode.getRightChild());//ัะฒัะทัะฒะฐะตะผ ะฟัะตะตะผะฝะธะบะฐ ั ะฟัะฐะฒัะผ ะฟะพัะพะผะบะพะผ ัะดะฐะปัะตะผะพะณะพ ัะทะปะฐ
}
return successor;
}
เชเชพเชขเซ เชจเชพเชเชตเชพเชจเซ เชชเชฆเซเชงเชคเชฟเชจเซ เชธเชเชชเซเชฐเซเชฃ เชเซเชก:
public boolean delete(int deleteKey) {
Node<T> current = root;
Node<T> parent = current;
boolean isLeftChild = false;//ะ ะทะฐะฒะธัะธะผะพััะธ ะพั ัะพะณะพ, ัะฒะปัะตััั ะปะธ ัะดะฐะปัะตะผัะน ัะทะตะป ะปะตะฒัะผ ะธะปะธ ะฟัะฐะฒัะผ ะฟะพัะพะผะบะพะผ ัะฒะพะตะณะพ ัะพะดะธัะตะปั, ะฑัะปะตะฒัะบะฐั ะฟะตัะตะผะตะฝะฝะฐั isLeftChild ะฑัะดะตั ะฟัะธะฝะธะผะฐัั ะทะฝะฐัะตะฝะธะต true ะธะปะธ false ัะพะพัะฒะตัััะฒะตะฝะฝะพ.
while (current.getKey() != deleteKey) {
parent = current;
if (deleteKey < current.getKey()) {
current = current.getLeftChild();
isLeftChild = true;
} else {
isLeftChild = false;
current = current.getRightChild();
}
if (current == null)
return false;
}
if (current.getLeftChild() == null && current.getRightChild() == null) {//ะฟะตัะฒัะน ัะปััะฐะน
if (current == root)
current = null;
else if (isLeftChild)
parent.setLeftChild(null);
else
parent.setRightChild(null);
}
else if (current.getRightChild() == null) {//ะฒัะพัะพะน ัะปััะฐะน
if (current == root)
root = current.getLeftChild();
else if (isLeftChild)
parent.setLeftChild(current.getLeftChild());
else
current.setRightChild(current.getLeftChild());
} else if (current.getLeftChild() == null) {
if (current == root)
root = current.getRightChild();
else if (isLeftChild)
parent.setLeftChild(current.getRightChild());
else
parent.setRightChild(current.getRightChild());
}
else {//ััะตัะธะน ัะปััะฐะน
Node<T> successor = getSuccessor(current);
if (current == root)
root = successor;
else if (isLeftChild)
parent.setLeftChild(successor);
else
parent.setRightChild(successor);
}
return true;
}
เชเชเชฟเชฒเชคเชพ O(log(n)) เชจเซ เช เชเชฆเชพเชเชฟเชค เชนเซเช เชถเชเซ เชเซ.
เชตเซเชเซเชทเชฎเชพเช เชฎเชนเชคเซเชคเชฎ/เชจเซเชฏเซเชจเชคเชฎ เชถเซเชงเชตเซเช
เชฆเซเชเซเชคเซ เชฐเซเชคเซ, เชตเซเชเซเชทเชฎเชพเช เชฒเชเซเชคเซเชคเชฎ / เชฎเชนเชคเซเชคเชฎ เชฎเซเชฒเซเชฏ เชเซเชตเซ เชฐเซเชคเซ เชถเซเชงเชตเซเช - เชคเชฎเชพเชฐเซ เช เชจเซเชเซเชฐเชฎเซ เชตเซเชเซเชทเชจเชพ เชกเชพเชฌเซ / เชเชฎเชฃเชพ เชเชเชเซเชจเซ เชธเชพเชเชเชณเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ; เชเซเชฏเชพเชฐเซ เชคเชฎเซ เชชเชพเชเชฆเชกเชพ เชชเชฐ เชชเชนเซเชเชเชถเซ, เชคเซเชฏเชพเชฐเซ เชคเซ เชจเซเชฏเซเชจเชคเชฎ/เชฎเชนเชคเซเชคเชฎ เชคเชคเซเชต เชนเชถเซ.
public Node<T> getMinimum(Node<T> startPoint) {
Node<T> current = startPoint;
Node<T> parent = current;
while (current != null) {
parent = current;
current = current.getLeftChild();
}
return parent;
}
public Node<T> getMaximum(Node<T> startPoint) {
Node<T> current = startPoint;
Node<T> parent = current;
while (current != null) {
parent = current;
current = current.getRightChild();
}
return parent;
}
เชเชเชฟเชฒเชคเชพ - O(log(n))
เชธเชชเซเชฐเชฎเชพเชฃ เชฌเชพเชฏเชชเชพเชธ
เชเซเชฐเชพเชตเชฐเซเชธเชฒ เช เชตเซเชเซเชทเชจเชพ เชฆเชฐเซเช เชจเซเชก เชธเชพเชฅเซ เชเชเชเช เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ เชฎเซเชฒเชพเชเชพเชค เชเซ.
เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชธเชชเซเชฐเชฎเชพเชฃ เชเซเชฐเชพเชตเชฐเซเชธเชฒ เช เชฒเซเชเซเชฐเชฟเชงเชฎ:
- เชกเชพเชฌเชพ เชฌเชพเชณเช เชชเชฐ เชเซเชฐเชฟเชฏเชพ เชเชฐเซ
- เชคเชฎเชพเชฐเซ เชธเชพเชฅเซ เชเช เชเซเชฐเชฟเชฏเชพ เชเชฐเซ
- เชฏเซเชเซเชฏ เชฌเชพเชณเช เชชเชฐ เชเซเชฐเชฟเชฏเชพ เชเชฐเซ
เชเซเชก:
public void inOrder(Node<T> current) {
if (current != null) {
inOrder(current.getLeftChild());
System.out.println(current.getData() + " ");//ะะดะตัั ะผะพะถะตั ะฑััั ะฒัะต, ััะพ ัะณะพะดะฝะพ
inOrder(current.getRightChild());
}
}
เชจเชฟเชทเซเชเชฐเซเชท
เชเซเชฒเซเชฒเซ! เชเซ เชฎเซเช เชเชเชเช เชธเชฎเชเชพเชตเซเชฏเซเช เชจเชฅเซ เช เชฅเชตเชพ เชเซเช เชเชฟเชชเซเชชเชฃเซ เชจเชฅเซ, เชคเซ เชนเซเช เชเชฟเชชเซเชชเชฃเซเชเชฎเชพเช เชฐเชพเชน เชเซเช เชฐเชนเซเชฏเซ เชเซเช. เชตเชเชจ เชฎเซเชเชฌ, เช เชนเซเช เชธเชเชชเซเชฐเซเชฃ เชเซเชก เชเซ.
Node.java:
public class Node<T> {
private T data;
private int key;
private Node<T> leftChild;
private Node<T> rightChild;
public Node(T data, int key) {
this.data = data;
this.key = key;
}
public void setLeftChild(Node<T> newNode) {
leftChild = newNode;
}
public void setRightChild(Node<T> newNode) {
rightChild = newNode;
}
public Node<T> getLeftChild() {
return leftChild;
}
public Node<T> getRightChild() {
return rightChild;
}
public T getData() {
return data;
}
public int getKey() {
return key;
}
}
BinaryTree.java:
public class BinaryTree<T> {
private Node<T> root;
public Node<T> find(int key) {
Node<T> current = root;
while (current.getKey() != key) {
if (key < current.getKey())
current = current.getLeftChild();
else
current = current.getRightChild();
if (current == null)
return null;
}
return current;
}
public void insert(T insertData, int key) {
Node<T> current = root;
Node<T> parent;
Node<T> newNode = new Node<>(insertData, key);
if (root == null)
root = newNode;
else {
while (true) {
parent = current;
if (key < current.getKey()) {
current = current.getLeftChild();
if (current == null) {
parent.setLeftChild(newNode);
return;
}
}
else {
current = current.getRightChild();
if (current == null) {
parent.setRightChild(newNode);
return;
}
}
}
}
}
public Node<T> getMinimum(Node<T> startPoint) {
Node<T> current = startPoint;
Node<T> parent = current;
while (current != null) {
parent = current;
current = current.getLeftChild();
}
return parent;
}
public Node<T> getMaximum(Node<T> startPoint) {
Node<T> current = startPoint;
Node<T> parent = current;
while (current != null) {
parent = current;
current = current.getRightChild();
}
return parent;
}
public Node<T> getSuccessor(Node<T> deleteNode) {
Node<T> parentSuccessor = deleteNode;
Node<T> successor = deleteNode;
Node<T> current = successor.getRightChild();
while (current != null) {
parentSuccessor = successor;
successor = current;
current = current.getLeftChild();
}
if (successor != deleteNode.getRightChild()) {
parentSuccessor.setLeftChild(successor.getRightChild());
successor.setRightChild(deleteNode.getRightChild());
}
return successor;
}
public boolean delete(int deleteKey) {
Node<T> current = root;
Node<T> parent = current;
boolean isLeftChild = false;
while (current.getKey() != deleteKey) {
parent = current;
if (deleteKey < current.getKey()) {
current = current.getLeftChild();
isLeftChild = true;
} else {
isLeftChild = false;
current = current.getRightChild();
}
if (current == null)
return false;
}
if (current.getLeftChild() == null && current.getRightChild() == null) {
if (current == root)
current = null;
else if (isLeftChild)
parent.setLeftChild(null);
else
parent.setRightChild(null);
}
else if (current.getRightChild() == null) {
if (current == root)
root = current.getLeftChild();
else if (isLeftChild)
parent.setLeftChild(current.getLeftChild());
else
current.setRightChild(current.getLeftChild());
} else if (current.getLeftChild() == null) {
if (current == root)
root = current.getRightChild();
else if (isLeftChild)
parent.setLeftChild(current.getRightChild());
else
parent.setRightChild(current.getRightChild());
}
else {
Node<T> successor = getSuccessor(current);
if (current == root)
root = successor;
else if (isLeftChild)
parent.setLeftChild(successor);
else
parent.setRightChild(successor);
}
return true;
}
public void inOrder(Node<T> current) {
if (current != null) {
inOrder(current.getLeftChild());
System.out.println(current.getData() + " ");
inOrder(current.getRightChild());
}
}
}
PS
O(n) เชฎเชพเช เช เชงเซเชเชคเชฟ
เชคเชฎเชพเชฐเชพเชฎเชพเชเชฅเซ เชเชฃเชพเช เชจเซเชเชงเซเชฏเซเช เชนเชถเซ: เชเซ เชคเชฎเซ เชเชพเชกเชจเซ เช เชธเชเชคเซเชฒเชฟเชค เชฌเชจเชพเชตเชถเซ เชคเซ เชถเซเช เชฅเชถเซ? เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชตเชงเชคเซ เชเซ เชธเชพเชฅเซ เชตเซเชเซเชทเชฎเชพเช เชจเซเชกเซเชธ เชฎเซเชเซ: 1,2,3,4,5,6... เชชเชเซ เชตเซเชเซเชท เชเชเชเช เช เชเชถเซ เชฒเชฟเชเช เชเชฐเซเชฒเซ เชธเซเชเชฟเชจเซ เชฏเชพเชฆ เช เชชเชพเชตเซ เชเซ. เช เชจเซ เชนเชพ, เชตเซเชเซเชท เชคเซเชจเซ เชตเซเชเซเชทเชจเซ เชฐเชเชจเชพ เชเซเชฎเชพเชตเชถเซ, เช เชจเซ เชคเซเชฅเซ เชกเซเชเชพ เชเชเซเชธเซเชธเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ. เชถเซเชง, เชจเชฟเชตเซเชถ เช เชจเซ เชเชพเชขเซ เชจเชพเชเชตเชพเชจเซ เชเชพเชฎเชเซเชฐเซเชจเซ เชเชเชฟเชฒเชคเชพ เชฒเชฟเชเช เชเชฐเซเชฒ เชธเซเชเชฟ เชเซเชตเซ เช เชฌเชจเซ เชเชถเซ: O(n). เช เชเช เชธเซเชฅเซ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชเซ, เชฎเชพเชฐเชพ เชฎเชคเซ, เชฆเซเชตเชฟเชธเชเชเซ เชตเซเชเซเชทเซเชจเชพ เชเซเชฐเชซเชพเชฏเชฆเชพ.
เชซเชเซเชค เชจเซเชเชงเชพเชฏเซเชฒเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เช เชธเชฐเซเชตเซเชฎเชพเช เชญเชพเช เชฒเช เชถเชเซ เชเซ.
เชนเซเช เชเชฃเชพ เชฒเชพเชเชฌเชพ เชธเชฎเชฏเชฅเซ เชนเซเชฌเซเชฐเซ เชชเชฐ เชจเชฅเซ, เช เชจเซ เชนเซเช เชเชพเชฃเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชคเชฎเซ เชเชฏเชพ เชตเชฟเชทเชฏเซ เชชเชฐ เชเชฏเชพ เชฒเซเชเซ เชตเชงเซ เชเซเชตเชพ เชฎเชพเชเชเซ เชเซ?
-
เชกเซเชเชพ เชธเซเชเซเชฐเชเซเชเชฐเซเชธ
-
เช เชฒเซเชเซเชฐเชฟเชงเชฎเซเชธ (DP, เชฐเชฟเชเชฐเซเชเชจ, เชกเซเชเชพ เชเชฎเซเชชเซเชฐเซเชถเชจ, เชตเชเซเชฐเซ)
-
เชตเชพเชธเซเชคเชตเชฟเช เชเซเชตเชจเชฎเชพเช เชกเซเชเชพ เชธเซเชเซเชฐเชเซเชเชฐเซเชธ เช เชจเซ เช เชฒเซเชเซเชฐเชฟเชงเชฎเชจเซ เชเชชเชฏเซเช
-
เชเชพเชตเชพเชฎเชพเช เชเชจเซเชกเซเชฐเซเชเชก เชเชชเซเชฒเซเชเซเชถเชจเชจเซเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช
-
เชเชพเชตเชพ เชตเซเชฌ เชเชชเซเชฒเชฟเชเซเชถเชจ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช
2 เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชเช เชฎเชค โโเชเชชเซเชฏเซ. 1 เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชฆเซเชฐ เชฐเชนเซเชฏเซ.
เชธเซเชคเซเชฐเซเชค: www.habr.com