āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŸā§āϰāĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦāĻžāχāύāĻžāϰāĻŋ āϏāĻžāĻ°ā§āϚ āĻŸā§āϰāĻŋ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻŦ⧇āύ

āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāύāĻž

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ—āĻžāĻ› āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇. āφāĻŽāĻŋ āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ āϞāĻŋāϖ⧇āĻ›āĻŋāϞāĻžāĻŽ āĻšāĻžāĻĢāĻŽā§āϝāĻžāύ āĻĒāĻĻā§āϧāϤāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āĻĄā§‡āϟāĻž āϏāĻ‚āϕ⧋āϚāύāĨ¤ āϏ⧇āĻ–āĻžāύ⧇ āφāĻŽāĻŋ āϏāĻ¤ā§āϝāĻŋāχ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ›āϗ⧁āϞāĻŋāϤ⧇ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāχāύāĻŋ, āĻ•āĻžāϰāĻŖ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ, āϏāĻ¨ā§āύāĻŋāĻŦ⧇āĻļ āĻ•āϰāĻž, āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ• āĻ›āĻŋāϞ āύāĻžāĨ¤ āĻāĻ–āύ āφāĻŽāĻŋ āĻ—āĻžāĻ› āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧ āϞāĻŋāĻ–āϤ⧇ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āϛ⧇. āϏāĻŽā§āĻ­āĻŦāϤ āφāĻŽāϰāĻž āĻļ⧁āϰ⧁ āĻ•āϰāĻŦāĨ¤

āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻŋ āĻšāϞ āĻāĻ•āϟāĻŋ āĻĄāĻžāϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āϝāĻž āĻ•āĻŋāύāĻžāϰāĻž āĻĻā§āĻŦāĻžāϰāĻž āϏāĻ‚āϝ⧁āĻ•ā§āϤ āύ⧋āĻĄ āύāĻŋāϝāĻŧ⧇ āĻ—āĻ āĻŋāϤāĨ¤ āφāĻŽāϰāĻž āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŋ āϝ⧇ āĻāĻ•āϟāĻŋ āĻ—āĻžāĻ› āĻāĻ•āϟāĻŋ āĻ—ā§āϰāĻžāĻĢ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āĻ—āĻžāĻ› āφāϛ⧇:

āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŸā§āϰāĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦāĻžāχāύāĻžāϰāĻŋ āϏāĻžāĻ°ā§āϚ āĻŸā§āϰāĻŋ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻŦ⧇āύ

āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ—āĻžāĻ› āύāϝāĻŧ! āϏāĻŦāχ āϤ⧋ āĻ•āĻžāϟāĻžāϰ āύāĻŋāĻšā§‡!

āĻĒāϰāĻŋāĻ­āĻžāώāĻž

āĻŽā§‚āϞ

āĻ—āĻžāϛ⧇āϰ āĻŽā§‚āϞ āĻļā§€āĻ°ā§āώāĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āύ⧋āĻĄāĨ¤ āωāĻĻāĻžāĻšāϰāϪ⧇, āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύ⧋āĻĄāĨ¤ āφāϏāϞ⧇, āϝ⧇āϕ⧋āύ⧋ āύ⧋āĻĄāϕ⧇ āĻāχ āύ⧋āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϰ āĻŽā§‚āϞ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻĒāĻŋāϤāĻžāĻŽāĻžāϤāĻž/āϏāĻ¨ā§āϤāĻžāύ

āϰ⧁āϟ āĻŦā§āϝāϤ⧀āϤ āϏāĻŽāĻ¸ā§āϤ āύ⧋āĻĄā§‡āϰ āĻ āĻŋāĻ• āĻāĻ• āĻĒā§āϰāĻžāĻ¨ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž āĻ…āĻ¨ā§āϝ āύ⧋āĻĄ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϝāĻžāϝāĻŧāĨ¤ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āύ⧋āĻĄā§‡āϰ āωāĻĒāϰ⧇āϰ āύ⧋āĻĄāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āĻ…āĻ­āĻŋāĻ­āĻžāĻŦāĻ• āĻāχ āύ⧋āĻĄ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇āϰ āύ⧀āĻšā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāϤ āĻāĻŦāĻ‚ āĻāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻāĻ•āϟāĻŋ āύ⧋āĻĄāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āĻŦāĻ‚āĻļāϧāϰ āĻāχ āύ⧋āĻĄ āĻāĻ•āϟāĻž āωāĻĻāĻžāĻšāϰāĻŖ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāĻ•āĨ¤ āύ⧋āĻĄ B āύāĻŋāύ, āϤāĻžāĻšāϞ⧇ āĻāϰ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻšāĻŦ⧇ āύ⧋āĻĄ A, āĻāĻŦāĻ‚ āĻāϰ āĻŦāĻžāĻšā§āϚāĻžāϰāĻž āĻšāĻŦ⧇ āύ⧋āĻĄ D, E āĻāĻŦāĻ‚ FāĨ¤

āϚāĻžāĻĻāϰ

āϝ⧇ āύ⧋āĻĄā§‡āϰ āϕ⧋āύ āϏāĻ¨ā§āϤāĻžāύ āύ⧇āχ āϤāĻžāϕ⧇ āĻ—āĻžāϛ⧇āϰ āĻĒāĻžāϤāĻž āĻŦāϞ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāϪ⧇, āύ⧋āĻĄ D, E, F, G, I, J, K āĻĒāĻžāϤāĻž āĻšāĻŦ⧇āĨ¤

āĻāϟāĻŋ āĻŽā§ŒāϞāĻŋāĻ• āĻĒāϰāĻŋāĻ­āĻžāώāĻžāĨ¤ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϧāĻžāϰāĻŖāĻž āĻĒāϰ⧇ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻž āĻšāĻŦ⧇. āϏ⧁āϤāϰāĻžāĻ‚, āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ› āĻšāϞ āĻāĻ•āϟāĻŋ āĻ—āĻžāĻ› āϝ⧇āĻ–āĻžāύ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āύ⧋āĻĄā§‡ āĻĻ⧁āϟāĻŋāϰ āĻŦ⧇āĻļāĻŋ āϏāĻ¨ā§āϤāĻžāύ āĻĨāĻžāĻ•āĻŦ⧇ āύāĻžāĨ¤ āφāĻĒāύāĻŋ āϝ⧇āĻŽāύ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧇āϛ⧇āύ, āωāĻĻāĻžāĻšāϰāĻŖ āĻĨ⧇āϕ⧇ āĻ—āĻžāĻ›āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻšāĻŦ⧇ āύāĻž, āĻ•āĻžāϰāĻŖ āύ⧋āĻĄ B āĻāĻŦāĻ‚ H āĻāϰ āĻĻ⧁āϟāĻŋāϰ āĻŦ⧇āĻļāĻŋ āϏāĻ¨ā§āϤāĻžāύ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāϛ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āϰāϝāĻŧ⧇āϛ⧇:

āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŸā§āϰāĻŋ āĻŦāĻž āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻŦāĻžāχāύāĻžāϰāĻŋ āϏāĻžāĻ°ā§āϚ āĻŸā§āϰāĻŋ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻŦ⧇āύ

āĻ—āĻžāϛ⧇āϰ āύ⧋āĻĄāϗ⧁āϞāĻŋāϤ⧇ āϝ⧇ āϕ⧋āύāĻ“ āϤāĻĨā§āϝ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ—āĻžāĻ› āĻšāϞ āĻāĻ•āϟāĻŋ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ—āĻžāĻ› āϝāĻžāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϰāϝāĻŧ⧇āϛ⧇:

  1. āĻŦāĻžāĻŽ āĻāĻŦāĻ‚ āĻĄāĻžāύ āωāĻĒāĻŦ⧃āĻ•ā§āώ āωāĻ­āϝāĻŧāχ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻ…āύ⧁āϏāĻ¨ā§āϧāĻžāύ āĻ—āĻžāĻ›āĨ¤
  2. āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻŋāϚāĻžāϰ⧇ āύ⧋āĻĄ X āĻāϰ āĻŦāĻžāĻŽ āϏāĻžāĻŦāĻŸā§āϰāĻŋāϰ āϏāĻŽāĻ¸ā§āϤ āύ⧋āĻĄā§‡āϰ āĻĄā§‡āϟāĻž āϕ⧀ āĻŽāĻžāύ āύ⧋āĻĄ X āĻāϰ āĻĄā§‡āϟāĻž āϕ⧀ āĻŽāĻžāύ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽāĨ¤
  3. āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻŦāĻŋāϚāĻžāϰ⧇ āύ⧋āĻĄ 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))

āϏāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāĻ• āĻŦāĻžāχāĻĒāĻžāϏ

āĻŸā§āϰāĻžāĻ­āĻžāĻ°ā§āϏāĻžāϞ āĻšāϞ āĻ—āĻžāϛ⧇āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āύ⧋āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻŋāϛ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻĻāĻ°ā§āĻļāύāĨ¤

āϰāĻŋāĻ•āĻžāĻ°ā§āϏāĻŋāĻ­ āϏāĻŋāĻŽā§‡āĻŸā§āϰāĻŋāĻ• āĻŸā§āϰāĻžāĻ­āĻžāĻ°ā§āϏāĻžāϞ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽ:

  1. āĻŦāĻžāĻŽ āϏāĻ¨ā§āϤāĻžāύ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āĻ•āĻ°ā§āĻŽ āĻ•āϰ⧁āύ
  2. āύāĻŋāĻœā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧁āύ
  3. āϏāĻ āĻŋāĻ• āϏāĻ¨ā§āϤāĻžāύ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ āĻ•āϰ⧁āύ

āϕ⧋āĻĄ:

    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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster