āĻĒā§āϰāϏā§āϤāĻžāĻŦāύāĻž
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻ āύā§āϏāύā§āϧāĻžāύ āĻāĻžāĻ āϏāĻŽā§āĻĒāϰā§āĻā§. āĻāĻŽāĻŋ āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻāĻāĻŋ āύāĻŋāĻŦāύā§āϧ āϞāĻŋāĻā§āĻāĻŋāϞāĻžāĻŽ āϏā§āĻāĻžāύ⧠āĻāĻŽāĻŋ āϏāϤā§āϝāĻŋāĻ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻāĻžāĻāĻā§āϞāĻŋāϤ⧠āĻŽāύā§āϝā§āĻ āĻĻāĻŋāĻāύāĻŋ, āĻāĻžāϰāĻŖ āĻ āύā§āϏāύā§āϧāĻžāύ, āϏāύā§āύāĻŋāĻŦā§āĻļ āĻāϰāĻž, āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāĻā§āϞāĻŋ āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ āĻāĻŋāϞ āύāĻžāĨ¤ āĻāĻāύ āĻāĻŽāĻŋ āĻāĻžāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻāĻāĻŋ āύāĻŋāĻŦāύā§āϧ āϞāĻŋāĻāϤ⧠āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϝāĻŧā§āĻā§. āϏāĻŽā§āĻāĻŦāϤ āĻāĻŽāϰāĻž āĻļā§āϰ⧠āĻāϰāĻŦāĨ¤
āĻāĻāĻāĻŋ āĻā§āϰāĻŋ āĻšāϞ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻž āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āϝāĻž āĻāĻŋāύāĻžāϰāĻž āĻĻā§āĻŦāĻžāϰāĻž āϏāĻāϝā§āĻā§āϤ āύā§āĻĄ āύāĻŋāϝāĻŧā§ āĻāĻ āĻŋāϤāĨ¤ āĻāĻŽāϰāĻž āĻŦāϞāϤ⧠āĻĒāĻžāϰāĻŋ āϝ⧠āĻāĻāĻāĻŋ āĻāĻžāĻ āĻāĻāĻāĻŋ āĻā§āϰāĻžāĻĢā§āϰ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āώ āĻā§āώā§āϤā§āϰā§āĨ¤ āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āĻāĻžāĻ āĻāĻā§:

āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻ
āύā§āϏāύā§āϧāĻžāύ āĻāĻžāĻ āύāϝāĻŧ! āϏāĻŦāĻ āϤ⧠āĻāĻžāĻāĻžāϰ āύāĻŋāĻā§!
āĻĒāϰāĻŋāĻāĻžāώāĻž
āĻŽā§āϞ
āĻāĻžāĻā§āϰ āĻŽā§āϞ āĻļā§āϰā§āώāϏā§āĻĨāĻžāύā§āϝāĻŧ āύā§āĻĄāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āύā§āĻĄāĨ¤ āĻāϏāϞā§, āϝā§āĻā§āύ⧠āύā§āĻĄāĻā§ āĻāĻ āύā§āĻĄā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āϏāĻžāĻŦāĻā§āϰāĻŋāϰ āĻŽā§āϞ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻĒāĻŋāϤāĻžāĻŽāĻžāϤāĻž/āϏāύā§āϤāĻžāύ
āϰā§āĻ āĻŦā§āϝāϤā§āϤ āϏāĻŽāϏā§āϤ āύā§āĻĄā§āϰ āĻ āĻŋāĻ āĻāĻ āĻĒā§āϰāĻžāύā§āϤ āĻĨāĻžāĻā§ āϝāĻž āĻ āύā§āϝ āύā§āĻĄ āĻĒāϰā§āϝāύā§āϤ āϝāĻžāϝāĻŧāĨ¤ āĻŦāϰā§āϤāĻŽāĻžāύ āύā§āĻĄā§āϰ āĻāĻĒāϰā§āϰ āύā§āĻĄāĻā§ āĻŦāϞāĻž āĻšāϝāĻŧ āĻ āĻāĻŋāĻāĻžāĻŦāĻ āĻāĻ āύā§āĻĄ āĻŦāϰā§āϤāĻŽāĻžāύā§āϰ āύā§āĻā§ āĻ āĻŦāϏā§āĻĨāĻŋāϤ āĻāĻŦāĻ āĻāĻāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āĻāĻāĻāĻŋ āύā§āĻĄāĻā§ āĻŦāϞāĻž āĻšāϝāĻŧ āĻŦāĻāĻļāϧāϰ āĻāĻ āύā§āĻĄ āĻāĻāĻāĻž āĻāĻĻāĻžāĻšāϰāĻŖ āύā§āĻāϝāĻŧāĻž āϝāĻžāĻāĨ¤ āύā§āĻĄ 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 āĻļāĻŋāĻļā§āϰāĻž āĻļā§āύā§āϝ āĻšāĻŦā§)āĨ¤ āĻāĻĒāύāĻŋ āϏāĻŽā§āĻāĻŦāϤ āĻŦā§āĻāϤ⧠āĻĒā§āϰā§āĻā§āύ āϝ⧠āĻāĻ āĻā§āώā§āϤā§āϰ⧠āϏāĻāĻā§āϝāĻž āĻĄā§āĻāĻž āĻšāϞ āύā§āĻĄā§ āϏāĻāϰāĻā§āώāĻŋāϤ āĻĄā§āĻāĻž; āĻā§ - āύā§āĻĄ āĻā§āĨ¤
āĻāĻŽāϰāĻž āĻāĻŋāĻāĻāĻāĻŋ āĻŦā§āϰ āĻāϰā§āĻāĻŋ, āĻāĻāύ āĻāĻžāĻā§āϰ āĻāĻžāĻĒā§āϰ āϏāĻŽāϏā§āϝāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻĨāĻž āĻŦāϞāĻž āϝāĻžāĻāĨ¤ āĻāĻāĻžāύ⧠āĻāĻŦāĻ āύā§āĻā§, "āĻŦā§āĻā§āώ" āĻļāĻŦā§āĻĻā§āϰ āĻ āϰā§āĻĨ āĻšāĻŦā§ āĻāĻāĻāĻŋ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻ āύā§āϏāύā§āϧāĻžāύ āĻāĻžāĻā§āϰ āϧāĻžāϰāĻŖāĻžāĨ¤ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻāĻžāĻā§āϰ āĻāĻ āύ:
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))⧎
āĻ āĻĒāϏāĻžāϰāĻŖ
āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻšāϞ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻāĻŋāϞ āĻ āĻĒāĻžāϰā§āĻļāύ āϝāĻž āĻāĻāĻāĻŋ āĻāĻžāĻ āĻĻāĻŋāϝāĻŧā§ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻāĻž āϏā§āĻĒāώā§āĻ āϝ⧠āĻĒā§āϰāĻĨāĻŽā§ āĻāĻŽāϰāĻž āϝ⧠āĻāĻĒāĻžāĻĻāĻžāύāĻāĻŋ āϏāϰāĻžāϤ⧠āϝāĻžāĻā§āĻāĻŋ āϤāĻž āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϤāĻžāϰāĻĒāϰ āĻāĻŋ? āϝāĻĻāĻŋ āĻāĻŽāϰāĻž āĻāϰ āϰā§āĻĢāĻžāϰā§āύā§āϏāĻāĻŋ null āĻ āϏā§āĻ āĻāϰāĻŋ, āϤāĻžāĻšāϞ⧠āĻāĻŽāϰāĻž āϝ⧠āϏāĻžāĻŦāĻā§āϰāĻŋāϰ āĻŽā§āϞ āĻāĻ āύā§āĻĄāĻāĻŋ āϏ⧠āϏāĻŽā§āĻĒāϰā§āĻā§ āϤāĻĨā§āϝ āĻšāĻžāϰāĻžāĻŦā§āĨ¤ āĻāĻžāĻ āĻ āĻĒāϏāĻžāϰāĻŖ āĻĒāĻĻā§āϧāϤāĻŋ āϤāĻŋāύāĻāĻŋ āĻā§āώā§āϤā§āϰ⧠āĻŦāĻŋāĻāĻā§āϤ āĻāϰāĻž āĻšāϝāĻŧ.
āĻĒā§āϰāĻĨāĻŽ āĻŽāĻžāĻŽāϞāĻžāĨ¤ āϝ⧠āύā§āĻĄāĻāĻŋ āϏāϰāĻžāύ⧠āĻšāĻŦā§ āϤāĻžāϰ āĻā§āύ āϏāύā§āϤāĻžāύ āύā§āĻāĨ¤
āϝāĻĻāĻŋ āĻŽā§āĻā§ āĻĢā§āϞāĻž āύā§āĻĄā§āϰ āĻā§āύ āϏāύā§āϤāĻžāύ āύāĻž āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒāĻžāϤāĻžāĨ¤ āĻ āϤāĻāĻŦ, āĻāĻĒāύāĻŋ āĻā§āĻŦāϞāĻŽāĻžāϤā§āϰ āĻāϰ āĻĒāĻŋāϤāĻžāĻŽāĻžāϤāĻžāϰ leftChild āĻŦāĻž rightChild āĻā§āώā§āϤā§āϰāĻā§āϞāĻŋāĻā§ āύāĻžāϞ āϏā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻŽāĻžāĻŽāϞāĻžāĨ¤ āϝ⧠āύā§āĻĄāĻāĻŋ āĻ āĻĒāϏāĻžāϰāĻŖ āĻāϰāϤ⧠āĻšāĻŦā§ āϤāĻžāϰ āĻāĻāĻāĻŋ āϏāύā§āϤāĻžāύ āĻāĻā§
āĻāĻ āĻŽāĻžāĻŽāϞāĻžāĻāĻŋāĻ āĻā§āĻŦ āĻāĻ āĻŋāύ āύāϝāĻŧāĨ¤ āĻāϏā§āύ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖā§ āĻĢāĻŋāϰ⧠āϝāĻžāĻāĨ¤ āϧāϰā§āύ āĻāĻŽāĻžāĻĻā§āϰ āĻā§ 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());
}
}
}
āĻĻā§āϰāώā§āĻāĻŦā§āϝ
O(n) āĻāϰ āĻ āĻŦāĻā§āώāϝāĻŧ
āĻāĻĒāύāĻžāϰāĻž āĻ āύā§āĻā§āĻ āĻšāϝāĻŧāϤ⧠āϞāĻā§āώā§āϝ āĻāϰā§āĻā§āύ: āĻāĻžāĻāĻā§ āĻāĻžāϰāϏāĻžāĻŽā§āϝāĻšā§āύ āĻāϰ⧠āĻĻāĻŋāϞ⧠āĻā§ āĻšāĻŦā§? āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻā§āϰāĻŽāĻŦāϰā§āϧāĻŽāĻžāύ āĻā§āĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻžāĻā§ āύā§āĻĄāĻā§āϞāĻŋ āϰāĻžāĻā§āύ: 1,2,3,4,5,6... āϤāĻžāϰāĻĒāϰ āĻāĻžāĻāĻāĻŋ āĻāĻŋāĻā§āĻāĻž āϞāĻŋāĻā§āĻāϝā§āĻā§āϤ āϤāĻžāϞāĻŋāĻāĻžāϰ āϏā§āĻŽāϰāĻŖ āĻāϰāĻŋāϝāĻŧā§ āĻĻā§āĻŦā§āĨ¤ āĻāĻŦāĻ āĻšā§āϝāĻžāĻ, āĻāĻžāĻāĻāĻŋ āϤāĻžāϰ āĻāĻžāĻā§āϰ āĻāĻ āύ āĻšāĻžāϰāĻžāĻŦā§, āĻāĻŦāĻ āϤāĻžāĻ āĻĄā§āĻāĻž āĻ ā§āϝāĻžāĻā§āϏā§āϏā§āϰ āĻĻāĻā§āώāϤāĻžāĨ¤ āĻ āύā§āϏāύā§āϧāĻžāύ, āϏāύā§āύāĻŋāĻŦā§āĻļ, āĻāĻŦāĻ āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒāĻā§āϞāĻŋāϰ āĻāĻāĻŋāϞāϤāĻž āĻāĻāĻāĻŋ āϞāĻŋāĻā§āĻāϝā§āĻā§āϤ āϤāĻžāϞāĻŋāĻāĻžāϰ āĻŽāϤā§āĻ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§: O(n)āĨ¤ āĻāĻāĻŋ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻ, āĻāĻŽāĻžāϰ āĻŽāϤā§, āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻāĻžāĻā§āϰ āĻ āϏā§āĻŦāĻŋāϧāĻžāĨ¤
āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āύāĻŋāĻŦāύā§āϧāĻŋāϤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻāϰāĻŋāĻĒā§ āĻ āĻāĻļāĻā§āϰāĻšāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāϰā§āύāĨ¤
āĻāĻŽāĻŋ āĻ āύā§āĻ āĻĻāĻŋāύ āϧāϰ⧠āĻšā§āϝāĻžāĻŦā§āϰ⧠āĻāĻŋāϞāĻžāĻŽ āύāĻž, āĻāĻŦāĻ āĻāĻŽāĻŋ āĻāĻžāύāϤ⧠āĻāĻžāĻ āϝ⧠āĻāĻĒāύāĻŋ āĻā§āύ āĻŦāĻŋāώāϝāĻŧā§ āĻāϰāĻ āĻĻā§āĻāϤ⧠āĻāĻžāύ?
āĻāĻĒāĻžāϤā§āϤ āĻāĻžāĻ āĻžāĻŽā§
āĻ ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽ (DP, recursion, data āĻāĻŽā§āĻĒā§āϰā§āĻļāύ, āĻāϤā§āϝāĻžāĻĻāĻŋ)
āĻŦāĻžāϏā§āϤāĻŦ āĻā§āĻŦāύ⧠āĻĄā§āĻāĻž āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻāĻŦāĻ āĻ ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽā§āϰ āĻĒā§āϰāϝāĻŧā§āĻ
āĻāĻžāĻāĻžāϤ⧠āĻ ā§āϝāĻžāύā§āĻĄā§āϰāϝāĻŧā§āĻĄ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ
āĻāĻžāĻāĻž āĻāϝāĻŧā§āĻŦ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ
2 āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āĻ āĻĻāĻŋāϝāĻŧā§āĻā§āύāĨ¤ ā§§ āĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāĻŋāϰāϤ āĻāĻŋāϞā§āύāĨ¤
āϏā§āϤā§āϰ: www.habr.com
