แแ แแแฃแแแ
แแก แกแขแแขแแ แแฎแแแ แแแแแ แฃแแ แกแแซแแแแ แฎแแแแก. แแ แชแแขแ แฎแแแก แฌแแ แแแแฌแแ แ แกแขแแขแแ แแแแก แจแแกแแฎแแ
แฎแ แแ แแก แแแแแชแแแแ แกแขแ แฃแฅแขแฃแ แ, แ แแแแแแช แจแแแแแแ แแแแแแแแ แแแแแแจแแ แแแฃแแ แแแแแซแแแแกแแแ. แจแแแแแซแแแ แแแฅแแแ, แ แแ แฎแ แแ แแก แแ แแคแแแแก แแแแกแแแฃแแ แแแฃแแ แจแแแแฎแแแแ. แแฅ แแ แแก แแแแแแแแ แฎแ:
แแก แแ แแ แแก แแ แแแแแ แกแแซแแแแ แฎแ! แงแแแแแคแแ แ แญแ แแก แฅแแแจแแ!
แขแแ แแแแแแแแแ
root
แฎแแก แคแแกแแ แแ แแก แงแแแแแแ แแแฆแแแ แแแแแซแ. แแแแแแแแจแ แแก แแ แแก 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;
}
//...ะพััะฐะปัะฝัะต ะผะตัะพะดั ัะทะปะฐ
}
แแแแแแฃแ แแแแแซแก แฐแงแแแก แแ แ แจแแแแ (แกแแแกแแแแ แจแแกแแซแแแแแแแ, แ แแ leftChild แแ/แแ rightChild แแแแจแแแแ แแงแแก null). แแแแแ แแแฎแแแแ, แ แแ แแ แจแแแแฎแแแแแจแ แ แแชแฎแแแแ แแแแแชแแแแแ แแ แแก แแแแแซแจแ แจแแแแฎแฃแแ แแแแแชแแแแแ; แแแกแแฆแแแ - แแแแแซแแก แแแกแแฆแแแ.
แฉแแแ แแแแแ แแแแแ แแแแแซแ, แแฎแแ แแแแแ แแแกแแฃแแ แแ แฎแแแแแก แแฅแขแฃแแแฃแ แแ แแแแแแแแแ. แจแแแแแแแจแ แกแแขแงแแ โแฎแโ แแแจแแแแก แแ แแแแแ แกแแซแแแแ แฎแแก แแแแชแแคแชแแแก. แแ แแแแแ แฎแแก แกแขแ แฃแฅแขแฃแ แ:
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-แแ, แแแจแแ แแแแแแ แแแแ แแแคแแ แแแชแแแก แแ แฅแแแฎแแก แจแแกแแฎแแ, แ แแแแแก แคแแกแแ แแ แแก แแก แแแแแซแ. แฎแแก แแแชแแแแแแก แแแแแแแแ แแงแแคแ แกแแ แจแแแแฎแแแแแจแ.
แแแ แแแแ แจแแแแฎแแแแ. แแแแกแแฆแแ แแแแแซแก แจแแแแ แแ แฐแงแแแก.
แแฃ แฌแแกแแจแแแแ แแแแแซแก แจแแแแ แแ แฐแงแแแก, แแก แแแจแแแแก, แ แแ แแก แคแแแแแแ. แแแแขแแ, แแฅแแแ แจแแแแซแแแแ แฃแแ แแแแ แแแแงแแแแ แแแกแ แแจแแแแแก แแแ แชแฎแแแ แแ แแแ แฏแแแแ Child แแแแแแ 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). แแก แแ แแก แแ แแแแแ แฎแแแแแก แแ แ-แแ แแ แงแแแแแแ แแแแจแแแแแแแแแ, แฉแแแ แแแ แแ, แแแแฃแกแ.
แแแแแแแแฎแแแจแ แแแแแฌแแแแแแ แจแแฃแซแแแแ แแฎแแแแ แแแ แแแแกแขแ แแ แแแฃแ แแแแฎแแแ แแแแแแก.
แแ แกแแแแแแ แแแแ แฎแแแแ แแ แแงแแคแแแแแ Habrรฉ-แแ แแ แแแแแ แแแชแแแ, แ แ แกแขแแขแแแแแก แแแฎแแ แแกแฃแ แ แแแขแ?
-
แแแแแชแแแแ แกแขแ แฃแฅแขแฃแ แแแ
-
แแแแแ แแแแแแ (DP, แ แแแฃแ แกแแ, แแแแแชแแแแ แจแแแฃแแจแแ แแ แ.แจ.)
-
แแแแแชแแแแ แกแขแ แฃแฅแขแฃแ แแแแกแ แแ แแแแแ แแแแแแแก แแแแแงแแแแแ แ แแแแฃแ แชแฎแแแ แแแแจแ
-
แแแแ แแแแแก แแแแแแแชแแแแแก แแแแ แแแ แแแแแ แฏแแแแจแ
-
Java แแแ แแแแแแแชแแแก แแ แแแ แแแแ แแแ
แฎแแ แแแกแชแ 2 แแแแฎแแแ แแแแแแ. 1 แแแแฎแแแ แแแแแแ แแแแ แจแแแแแแ.
แฌแงแแ แ: www.habr.com