เจชเฉเจฐเฉเจค เจเจฐเฉ
เจเจน เจฒเฉเจ เจฌเจพเจเจจเจฐเฉ เจเฉเจ เจฐเฉเฉฑเจเจพเจ เจฌเจพเจฐเฉ เจนเฉเฅค เจฎเฉเจ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจเจธ เจฌเจพเจฐเฉ เจเฉฑเจ เจฒเฉเจ เจเฉเจคเจพ
เจเฉฑเจ เจฐเฉเฉฑเจ เจเฉฑเจ เจกเฉเจเจพ เจขเจพเจเจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจเจฟเจจเจพเจฐเจฟเจเจ เจฆเฉเจเจฐเจพ เจเฉเฉเฉ เจจเฉเจก เจนเฉเฉฐเจฆเฉ เจนเจจเฅค เจ เจธเฉเจ เจเจนเจฟ เจธเจเจฆเฉ เจนเจพเจ เจเจฟ เจเฉฑเจ เจฐเฉเฉฑเจ เจเฉฑเจ เจเฉเจฐเจพเจซ เจฆเจพ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ เจเฉเจธ เจนเฉ. เจเฉฑเจฅเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ เจฐเฉเฉฑเจ เจนเฉ:
เจเจน เจเฉฑเจ เจฌเจพเจเจจเจฐเฉ เจเฉเจ เจฐเฉเฉฑเจ เจจเจนเฉเจ เจนเฉ! เจธเจญ เจเฉเจ เจเฉฑเจเจฟเจ เจเจฟเจ เจนเฉ!
เจชเจฐเจฟเจญเจพเจธเจผเจพ
เจฐเฉเจ
เจฐเฉเฉฑเจ เจฆเฉ เจเฉเฉเจน - เจเจน เจเจธเจฆเจพ เจธเจญ เจคเฉเจ เจเฉฑเจเจพ เจจเฉเจก เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ, เจเจน เจจเฉเจก เจ เจนเฉเฅค เจเฉฑเจ เจฐเฉเฉฑเจ เจตเจฟเฉฑเจ, เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจฎเจพเจฐเจ เจฐเฉเจ เจคเฉเจ เจเจฟเจธเฉ เจนเฉเจฐ เจจเฉเจก เจคเฉฑเจ เจฒเฉ เจเจพ เจธเจเจฆเจพ เจนเฉ! เจตเจพเจธเจคเจต เจตเจฟเฉฑเจ, เจเจฟเจธเฉ เจตเฉ เจจเฉเจก เจจเฉเฉฐ เจเจธ เจจเฉเจก เจฆเฉ เจ เจจเฉเจธเจพเจฐเฉ เจธเจฌเจเฉเจฐเฉ เจฆเจพ เจฎเฉเจฒ เจฎเฉฐเจจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจฎเจพเจคเจพ-เจชเจฟเจคเจพ/เจเจฒเจพเจฆ
เจฐเฉเจ เจจเฉเฉฐ เจเฉฑเจก เจเฉ เจธเจพเจฐเฉ เจจเฉเจกเจพเจ เจฆเจพ เจฌเจฟเจฒเจเฉเจฒ เจเฉฑเจ เจเจฟเจจเจพเจฐเจพ เจฆเฉเจเฉ เจจเฉเจก เจตเฉฑเจฒ เจเจพเจเจฆเจพ เจนเฉเฅค เจฎเฉเจเฉเจฆเจพ เจฆเฉ เจเฉฑเจชเจฐ เจธเจฅเจฟเจค เจจเฉเจก เจจเฉเฉฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจเจน เจจเฉเจก. เจฎเฉเจเฉเจฆเจพ เจจเฉเจก เจฆเฉ เจนเฉเจ เจพเจ เจธเจฅเจฟเจค เจ เจคเฉ เจเจธ เจจเจพเจฒ เจเฉเฉเจฟเจ เจเฉฑเจ เจจเฉเจก เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ เจตเฉฐเจธเจผเจ เจเจน เจจเฉเจก. เจเจ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเจ. เจเจฒเฉ เจจเฉเจก เจฌเฉ เจฒเฉเจเจฆเฉ เจนเจพเจ, เจซเจฟเจฐ เจเจธเจฆเฉ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจจเฉเจก เจ เจนเฉเจฃเจเฉ, เจ เจคเฉ เจเจธเจฆเฉ เจฌเฉฑเจเฉ เจจเฉเจก เจกเฉ, เจ เจ เจคเฉ เจเฉฑเจซ เจนเฉเจฃเจเฉเฅค
เจฒเฉเจซ
เจเฉฑเจ เจจเฉเจก เจเจฟเจธ เจฆเฉ เจเฉเจ เจฌเฉฑเจเฉ เจจเจนเฉเจ เจนเจจ, เจจเฉเฉฐ เจฐเฉเฉฑเจ เจฆเจพ เจชเฉฑเจคเจพ เจเจฟเจนเจพ เจเจพเจตเฉเจเจพเฅค เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ, เจชเฉฑเจคเฉ 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 เจคเฉฑเจค เจนเจจ, เจคเจพเจ เจเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจฒเฉเจ(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;
}
}
}
}
}
เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจฎเฉเจเฉเจฆเจพ เจจเฉเจก เจคเฉเจ เจเจฒเจพเจตเจพ, เจฎเฉเจเฉเจฆเจพ เจจเฉเจก เจฆเฉ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจฌเจพเจฐเฉ เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉ. เจเจฆเฉเจ เจเจฐเฉฐเจ null เจฆเฉ เจฌเจฐเจพเจฌเจฐ เจนเฉ เจเจพเจเจฆเจพ เจนเฉ, เจคเจพเจ เจชเฉเจฐเฉเจเจ เจตเฉเจฐเฉเจเจฌเจฒ เจตเจฟเฉฑเจ เจเจน เจธเจผเฉเจ เจนเฉเจตเฉเจเฉ เจเจฟเจธเจฆเฉ เจธเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉเฅค
เจธเฉฐเจฎเจฟเจฒเจจ เจฆเฉ เจเฉเจธเจผเจฒเจคเจพ เจธเจชเฉฑเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจ - O(log(n)) เจฆเฉ เจธเจฎเจพเจจ เจนเฉเจตเฉเจเฉเฅค
เจนเจเจพเจเจฃ
เจนเจเจพเจเจฃเจพ เจธเจญ เจคเฉเจ เจเจเจพ เจเจชเจฐเฉเจธเจผเจจ เจนเฉ เจเจฟเจธเจจเฉเฉฐ เจเฉฑเจ เจฐเฉเฉฑเจ 'เจคเฉ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉเฅค เจเจน เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจฟ เจชเจนเจฟเจฒเจพเจ เจธเจพเจจเฉเฉฐ เจเจน เจคเฉฑเจค เจฒเฉฑเจญเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉเจเจเฉ เจเจฟเจธ เจจเฉเฉฐ เจ เจธเฉเจ เจฎเจฟเจเจพเจเจฃ เจเจพ เจฐเจนเฉ เจนเจพเจ. เจชเจฐ เจซเจฟเจฐ เจเฉ? เจเฉเจเจฐ เจ เจธเฉเจ เจเจธเจฆเฉ เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ null 'เจคเฉ เจธเฉเฉฑเจ เจเจฐเจฆเฉ เจนเจพเจ, เจคเจพเจ เจ เจธเฉเจ เจเจธ เจธเจฌเจเฉเจฐเฉ เจฌเจพเจฐเฉ เจเจพเจฃเจเจพเจฐเฉ เจเฉเจ เจฆเฉเจตเจพเจเจเฉ เจเจฟเจธ เจฆเจพ เจเจน เจจเฉเจก เจฐเฉเจ เจนเฉเฅค เจฐเฉเฉฑเจเจพเจ เจจเฉเฉฐ เจนเจเจพเจเจฃ เจฆเฉ เจคเจฐเฉเจเจฟเจเจ เจจเฉเฉฐ เจคเจฟเฉฐเจจ เจฎเจพเจฎเจฒเจฟเจเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฟเจ เจเจฟเจ เจนเฉเฅค
เจชเจนเจฟเจฒเจพ เจเฉเจธ. เจฎเจฟเจเจพเจ เจเจพ เจฐเจนเฉ เจจเฉเจก เจฆเจพ เจเฉเจ เจฌเฉฑเจเจพ เจจเจนเฉเจ เจนเฉ
เจเฉเจเจฐ เจฎเจฟเจเจพเจ เจเจพ เจฐเจนเฉ เจจเฉเจก เจฆเฉ เจเฉเจ เจฌเฉฑเจเฉ เจจเจนเฉเจ เจนเจจ, เจคเจพเจ เจเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจเจน เจเฉฑเจ เจชเฉฑเจคเจพ เจนเฉเฅค เจเจธเจฒเจ, เจคเฉเจธเฉเจ เจฌเจธ เจเจธเจฆเฉ เจชเฉเจฐเฉเจเจ เจฆเฉ เจฒเฉเจซเจเจเจพเจเจฒเจก เจเจพเจ เจฐเจพเจเจเจเจพเจเจฒเจก เจซเฉเจฒเจก เจจเฉเฉฐ null เจคเฉ เจธเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจฆเฉเจเจพ เจเฉเจธ. เจฎเจฟเจเจพเจ เจเจพเจฃ เจตเจพเจฒเฉ เจจเฉเจก เจฆเจพ เจเฉฑเจ เจฌเฉฑเจเจพ เจนเฉ
เจเจน เจฎเจพเจฎเจฒเจพ เจตเฉ เจฌเจนเฉเจคเจพ เจชเฉเจเฉเจฆเจพ เจจเจนเฉเจ เจนเฉเฅค เจเจ เจเจชเจฃเฉ เจเจฆเจพเจนเจฐเจจ เจตเฉฑเจฒ เจฎเฉเฉเฉเจเฅค เจฎเฉฐเจจ เจฒเจ เจเจฟ เจธเจพเจจเฉเฉฐ เจเฉเฉฐเจเฉ 14 เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจฒเฉเจฎเฉเจเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจธเจนเจฟเจฎเจคเฉ เจฆเจฟเจ เจเจฟ เจเจฟเจเจเจเจฟ เจเจน เจเฉเฉฐเจเฉ 10 เจตเจพเจฒเฉ เจจเฉเจก เจฆเจพ เจธเจนเฉ เจเฉฑเจคเจฐเจพเจงเจฟเจเจพเจฐเฉ เจนเฉ, เจคเจพเจ เจเจธเจฆเฉ เจเจฟเจธเฉ เจตเฉ เจเจฒเจพเจฆ (เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจธเจนเฉ) เจเฉเจฒ 10 เจคเฉเจ เจตเฉฑเจง เจเฉฑเจ เจเฉเฉฐเจเฉ เจนเฉเจตเฉเจเฉ, เจเจธ เจฒเจ เจคเฉเจธเฉเจ เจเจธเจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจฐเฉเฉฑเจ เจคเฉเจ "เจเฉฑเจ" เจธเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจจเฉเฉฐ เจธเจฟเฉฑเจงเฉ เจฎเจฟเจเจพเจ เจเจพ เจฐเจนเฉ เจจเฉเจก เจฆเฉ เจฌเฉฑเจเฉ เจจเจพเจฒ เจเฉเฉ เจธเจเจฆเจพ เจนเฉ, เจเจฟเจตเฉเจ เจเจฟ เจจเฉเจก เจจเฉเฉฐ เจเฉเฉฐเจเฉ 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). เจเจน เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ, เจฎเฉเจฐเฉ เจฐเจพเจ เจตเจฟเฉฑเจ, เจฌเจพเจเจจเจฐเฉ เจฐเฉเฉฑเจเจพเจ เจฆเฉ เจจเฉเจเจธเจพเจจ.
เจธเจฟเจฐเจซเจผ เจฐเจเจฟเจธเจเจฐเจก เจเจชเจญเฉเจเจคเจพ เจนเฉ เจธเจฐเจตเฉเจเจฃ เจตเจฟเฉฑเจ เจนเจฟเฉฑเจธเจพ เจฒเฉ เจธเจเจฆเฉ เจนเจจเฅค
เจฎเฉเจ เจฌเจนเฉเจค เจฒเฉฐเจฌเฉ เจธเจฎเฉเจ เจคเฉเจ เจนเฉฑเจฌ 'เจคเฉ เจจเจนเฉเจ เจนเจพเจ, เจ เจคเฉ เจฎเฉเจ เจเจพเจฃเจจเจพ เจเจพเจนเจพเจเจเจพ เจเจฟ เจคเฉเจธเฉเจ เจเจฟเจนเฉเฉ เจตเจฟเจธเจผเจฟเจเจ 'เจคเฉ เจนเฉเจฐ เจฒเฉเจ เจฆเฉเจเจฃเจพ เจเจพเจนเฉเจเฉ?
-
เจกเจพเจเจพ เจฌเจฃเจคเจฐ
-
เจเจฒเจเฉเจฐเจฟเจฆเจฎ (เจกเฉเจชเฉ, เจฐเฉเจเจฐเจธเจผเจจ, เจกเฉเจเจพ เจเฉฐเจชเจฐเฉเจธเจผเจจ, เจเจฆเจฟ)
-
เจ เจธเจฒ เจเฉเจตเจจ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจขเจพเจเจเฉ เจ เจคเฉ เจเจฒเจเฉเจฐเจฟเจฆเจฎ เจฆเฉ เจตเจฐเจคเฉเจ
-
Java เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจเฉเจฐเจพเจฎเจฟเฉฐเจ เจเจเจกเจฐเจพเจเจก เจเจชเจฒเฉเจเฉเจธเจผเจจ
-
Java เจตเจฟเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจตเฉเฉฑเจฌ เจเจชเจฒเฉเจเฉเจธเจผเจจ
2 เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจจเฉ เจตเฉเจ เจฆเจฟเฉฑเจคเฉเฅค 1 เจตเจฐเจคเฉเจเจเจพเจฐ เจฌเจเจฟเจเฅค
เจธเจฐเฉเจค: www.habr.com