ื‘ื™ื™ื ืขืจื™ ื˜ืจื™ ืึธื“ืขืจ ื•ื•ื™ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื•ื™ื

ืคืึธืจืคึผืœื™ื™

ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ื•ื•ืขื’ืŸ ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื™ื™ืžืขืจ. ืื™ืš ืœืขืฆื˜ื ืก ื’ืขืžืื›ื˜ ืึทืŸ ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื“ืึทื˜ืŸ ืงืึทืžืคึผืจืขืฉืึทืŸ ื ื™ืฆืŸ ื“ื™ Huffman ืื•ืคึฟืŸ. ื“ืึธืจื˜ ื”ืึธื‘ ืื™ืš ื ื™ืฉื˜ ืฆืึธืœืŸ ืคื™ืœ ืื›ื˜ื•ื ื’ ืฆื• ื‘ื™ื™ื ืขืจื™ ื‘ื™ื™ืžืขืจ, ื•ื•ืฒึทืœ ื“ื™ ืžืขื˜ืึธื“ืŸ ืคื•ืŸ ื–ื•ื›ืŸ, ืื™ื™ื ืก ืื•ืŸ ืื•ื™ืกืžืขืงืŸ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง. ืื™ืฆื˜ ืื™ืš ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืึทืŸ ืึทืจื˜ื™ืงืœ ื•ื•ืขื’ืŸ ื‘ื™ื™ืžืขืจ. ืœืืžื™ืจ ืื ื”ื™ื™ื‘ืขืŸ.

ื ื‘ื•ื™ื ืื™ื– ืึท ื“ืึทื˜ืŸ ืกื˜ืจื•ืงื˜ื•ืจ ื•ื•ืึธืก ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื ืึธื•ื“ื– ืคืืจื‘ื•ื ื“ืŸ ื“ื•ืจืš ืขื“ื–ืฉืึทื–. ืžื™ืจ ืงืขื ืขืŸ ื–ืึธื’ืŸ ืึทื– ืึท ื‘ื•ื™ื ืื™ื– ืึท ืกืคึผืขืฆื™ืขืœ ืคืึทืœ ืคื•ืŸ ืึท ื’ืจืึทืคื™ืง. ื“ืึธ ืื™ื– ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ื‘ื•ื™ื:

ื‘ื™ื™ื ืขืจื™ ื˜ืจื™ ืึธื“ืขืจ ื•ื•ื™ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื•ื™ื

ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื•ื™ื! ืึทืœืฅ ืื™ื– ื’ืขืฉื ื™ื˜ืŸ!

ื•ื•ืึธืงืึทื‘ื•ืœืึทืจื™

ื•ื•ืึธืจืฆืœ

ื‘ื•ื™ื ื•ื•ืึธืจืฆืœ - ื“ืึธืก ืื™ื– ื–ื™ื™ึทืŸ ืฉืคึผื™ืฅ ื ืึธื“ืข. ืื™ืŸ ื“ืขื ื‘ื™ื™ืฉืคึผื™ืœ, ื“ืึธืก ืื™ื– ื ืึธื“ืข ื. ืื™ืŸ ืึท ื‘ื•ื™ื, ื‘ืœื•ื™ื– ืื™ื™ืŸ ื•ื•ืขื’ ืงืขื ืขืŸ ืคื™ืจืŸ ืคื•ืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ืฆื• ืงื™ื™ืŸ ืื ื“ืขืจืข ื ืึธื“ืข! ืื™ืŸ ืคืึทืงื˜, ืงื™ื™ืŸ ื ืึธื“ืข ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ื“ืขืจ ื•ื•ืึธืจืฆืœ ืคื•ืŸ ื“ื™ ืกื•ื‘ื˜ืจื™ืข ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืฆื• ื“ืขื ื ืึธื“ืข.

ืขืœื˜ืขืจืŸ / ืงื™ื ื“ืกืงื™ื ื“ืขืจ

ืึทืœืข ื ืึธื•ื“ื– ืึทื—ื•ืฅ ื“ืขืจ ื•ื•ืึธืจืฆืœ ื”ืึธื‘ืŸ ืคึผื•ื ืงื˜ ืื™ื™ืŸ ื‘ืจืขื’ ื•ื•ืึธืก ืคื™ืจืŸ ืึทืจื•ื™ืฃ ืฆื• ืืŸ ืื ื“ืขืจ ื ืึธื“ืข. ื“ืขืจ ื ืึธื“ืข ืœื™ื’ืŸ ืื•ื™ื‘ืŸ ื“ื™ ืงืจืึทื ื˜ ืื™ื™ื ืขืจ ืื™ื– ื’ืขืจื•ืคืŸ ืคืึธื˜ืขืจ ื“ืขื ื ืึธื“ืข. ื ื ืึธื“ืข ืœื™ื’ืŸ ืื•ื ื˜ืขืจ ื“ื™ ืงืจืึทื ื˜ ืื™ื™ื ืขืจ ืื•ืŸ ืคืืจื‘ื•ื ื“ืŸ ืฆื• ืขืก ืื™ื– ื’ืขืจื•ืคืŸ ืึธืคึผืฉื˜ืึทืžืœื™ื ื’ ื“ืขื ื ืึธื“ืข. ื–ืืœ ืก ื ื•ืฆืŸ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ. ืœืึธืžื™ืจ ื ืขืžืขืŸ ื ืึธื“ืข ื‘, ื“ืขืจ ืคืึธื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ืึธื“ืข ื, ืื•ืŸ ืื™ืจืข ืงื™ื ื“ืขืจ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ื ืึธื“ืขืก D, E ืื•ืŸ F.

Sheet

ื ื ืึธื“ืข ื•ื•ืึธืก ื”ืื˜ ืงื™ื™ืŸ ืงื™ื ื“ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขืจื•ืคืŸ ืึท ื‘ืœืึทื˜ ืคื•ืŸ ื“ืขื ื‘ื•ื™ื. ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ ื‘ืœืขื˜ืขืจ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ืึธื•ื“ื– D, E, F, G, I, J, K.

ื“ืึธืก ืื™ื– ื“ื™ ื’ืจื•ื ื˜ ื˜ืขืจืžื™ื ืึธืœืึธื’ื™ืข. ืื ื“ืขืจืข ืงืึทื ืกืขืคึผืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ื™ืกืงืึทืกื˜ ื•ื•ื™ื™ึทื˜ืขืจ. ืึทื–ื•ื™, ืึท ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื ืื™ื– ืึท ื‘ื•ื™ื ืื™ืŸ ื•ื•ืึธืก ื™ืขื“ืขืจ ื ืึธื“ืข ื•ื•ืขื˜ ื”ืึธื‘ืŸ ื ื™ื˜ ืžืขืจ ื•ื•ื™ ืฆื•ื•ื™ื™ ืงื™ื ื“ืขืจ. ื•ื•ื™ ืื™ืจ ื’ืขืกื˜, ื“ืขืจ ื‘ื•ื™ื ืคื•ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ื‘ื™ื™ื ืขืจื™, ื•ื•ื™ื™ึทืœ ื“ื™ ื ืึธื•ื“ื– ื‘ ืื•ืŸ ื” ื”ืึธื‘ืŸ ืžืขืจ ื•ื•ื™ ืฆื•ื•ื™ื™ ืงื™ื ื“ืขืจ. ื“ืึธ ืื™ื– ืึท ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื:

ื‘ื™ื™ื ืขืจื™ ื˜ืจื™ ืึธื“ืขืจ ื•ื•ื™ ืฆื• ืฆื•ื’ืจื™ื™ื˜ืŸ ืึท ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื‘ื•ื™ื

ื“ื™ ื‘ื•ื™ื ื ืึธื•ื“ื– ืงืขื ืขืŸ ืึทื ื˜ื”ืึทืœื˜ืŸ ืงื™ื™ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข. ื ื‘ื™ื™ื ืขืจื™ ื–ื•ืš ื‘ื•ื™ื ืื™ื– ืึท ื‘ื™ื™ื ืขืจื™ ื‘ื•ื™ื ื•ื•ืึธืก ื”ืื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืจืึธืคึผืขืจื˜ื™ืขืก:

  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;
}

ืื•ื™ื‘ ื“ื™ ืงืจืึทื ื˜ ื•ื•ืขืจื˜ ื ื•ืœ, ื“ืขืžืึธืœื˜ ื“ืขืจ ื–ื•ื›ืŸ ื”ืื˜ ืจื™ื˜ืฉื˜ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ื‘ื•ื™ื (ืื™ืŸ ืึท ืงืึทื ืกืขืคึผื˜ืฉื•ืึทืœ ืžื“ืจื’ื”, ืื™ืจ ื–ืขื ื˜ ืื™ืŸ ืึท ื ื™ื˜-ืขื’ื–ื™ืกื˜ืึทื ื˜ ืึธืจื˜ ืื™ืŸ ื“ืขื ื‘ื•ื™ื - ืึท ืึธืคึผืฉื˜ืึทืžืœื™ื ื’ ืคื•ืŸ ืึท ื‘ืœืึทื˜).

ื–ืืœ ืก ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ื™ ื™ืคืขืงื˜ื™ื•ื•ื ืึทืก ืคื•ืŸ ื“ื™ ื–ื•ื›ืŸ ืึทืœื’ืขืจื™ื“ืึทื ืื•ื™ืฃ ืึท ื‘ืึทืœืึทื ืกื˜ ื‘ื•ื™ื (ืึท ื‘ื•ื™ื ืื™ืŸ ื•ื•ืึธืก ื ืึธื•ื“ื– ื–ืขื ืขืŸ ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืžืขืจ ืึธื“ืขืจ ื•ื•ื™ื™ื ื™ืงืขืจ ื™ื•ื•ืึทื ืœื™). ื“ืขืจื ืึธืš ื“ื™ ื–ื•ื›ืŸ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึธ (ืœืึธื’ (n)), ืื•ืŸ ื“ื™ ืœืึธื’ืึทืจื™ื˜ื”ื ืื™ื– ื‘ืึทื–ืข 2. ืงื•ืง: ืื•ื™ื‘ ืขืก ื–ืขื ืขืŸ n ืขืœืขืžืขื ื˜ืŸ ืื™ืŸ ืึท ื‘ืึทืœืึทื ืกื˜ ื‘ื•ื™ื, ื“ืึธืก ืžื™ื˜ืœ ืึทื– ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึธื’ (n) ืฆื• ื‘ืึทื–ืข 2 ืœืขื•ื•ืขืœืก ืคื•ืŸ ื“ื™ ื‘ื•ื™ื. ืื•ืŸ ืื™ืŸ ื–ื•ื›ืŸ, ืื™ืŸ ืื™ื™ืŸ ืฉืจื™ื˜ ืคื•ืŸ ื“ื™ ืฆื™ืงืœ, ืื™ืจ ื’ื™ื™ืŸ ืึทืจืึธืคึผ ืื™ื™ืŸ ืžื“ืจื’ื”.

Insert

ืื•ื™ื‘ ืื™ืจ ืึธื ื›ืึทืคึผืŸ ื“ื™ ืขืกืึทื ืก ืคื•ืŸ ื“ื™ ื–ื•ื›ืŸ, ืขืก ื•ื•ืขื˜ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืฉื•ื•ืขืจ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื™ื ืกืขืจืฉืึทืŸ. ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ื™ื™ืŸ ืึทืจืึธืคึผ ืฆื• ืึท ื‘ืœืึทื˜ ืคื•ืŸ ื“ืขื ื‘ื•ื™ื (ืœื•ื™ื˜ ื“ื™ ืึทืจืึธืคึผื’ืึทื ื’ ื›ึผืœืœื™ื ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ื™ ื–ื•ื›ืŸ) ืื•ืŸ ื•ื•ืขืจืŸ ื–ื™ื™ึทืŸ ืึธืคึผืฉื˜ืึทืžืœื™ื ื’ - ืœื™ื ืงืก ืึธื“ืขืจ ืจืขื›ื˜, ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ ืฉืœื™ืกืœ. ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ:

   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;
                    }
                }
            }
        }
    }

ืื™ืŸ ื“ืขื ืคืึทืœ, ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื“ืขื ืงืจืึทื ื˜ ื ืึธื“ืข, ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืงืจืึธื ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืคืึธื˜ืขืจ ืคื•ืŸ ื“ืขื ืงืจืึทื ื˜ ื ืึธื“ืข. ื•ื•ืขืŸ ืงืจืึทื ื˜ ื•ื•ืขืจื˜ ื’ืœื™ื™ึทืš ืฆื• ื ืึทืœ, ื“ื™ ืคืึธื˜ืขืจ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื•ื•ืขื˜ ืึทื ื˜ื”ืึทืœื˜ืŸ ื“ืขื ื‘ืœืึทื˜ ื•ื•ืึธืก ืžื™ืจ ื“ืึทืจืคึฟืŸ.
ื“ื™ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ืคื•ืŸ ื™ื ืกืขืจืฉืึทืŸ ื•ื•ืขื˜ ื“ืึธืš ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ืึทื– ืคื•ืŸ ื–ื•ื›ืŸ - ืึธ (ืœืึธื’ (n)).

ื‘ืึทื–ื™ื™ึทื˜ื™ืงื•ื ื’

ื‘ืึทื–ื™ื™ึทื˜ื™ืงื•ื ื’ ืื™ื– ื“ื™ ืžืขืจืกื˜ ืฉื•ื•ืขืจ ืึธืคึผืขืจืึทืฆื™ืข ื•ื•ืึธืก ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ืฆื• ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ืื•ื™ืฃ ืึท ื‘ื•ื™ื. ืขืก ืื™ื– ืงืœืึธืจ ืึทื– ืขืจืฉื˜ืขืจ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ื“ืขื ืขืœืขืžืขื ื˜ ื•ื•ืึธืก ืžื™ืจ ื–ืขื ืขืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ื•ื™ืกืžืขืงืŸ. ืึธื‘ืขืจ ื•ื•ืึธืก ื“ืขืžืึธืœื˜? ืื•ื™ื‘ ืžื™ืจ ืคืฉื•ื˜ ืฉื˜ืขืœืŸ ื–ื™ื™ืŸ ืจืขืคึฟืขืจืขื ืฅ ืฆื• ื ืึทืœ, ืžื™ืจ ื•ื•ืขืœืŸ ืคืึทืจืœื™ืจืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ ืกื•ื‘ื˜ืจื™ืข ืคื•ืŸ โ€‹โ€‹ื•ื•ืึธืก ื“ืขืจ ื ืึธื“ืข ืื™ื– ื“ืขืจ ื•ื•ืึธืจืฆืœ. ื‘ื•ื™ื ื‘ืึทื–ื™ื™ึทื˜ื™ืงื•ื ื’ ืžืขื˜ื”ืึธื“ืก ื–ืขื ืขืŸ ืฆืขื˜ื™ื™ืœื˜ ืื™ืŸ ื“ืจื™ื™ึท ืงืึทืกืขืก.

ืขืจืฉื˜ืขืจ ืคืึทืœ. ื“ืขืจ ื ืึธื“ืข ื•ื•ืึธืก ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜ ื”ืื˜ ืงื™ื™ืŸ ืงื™ื ื“ืขืจ

ืื•ื™ื‘ ื“ืขืจ ื ืึธื“ืข ื•ื•ืึธืก ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜ ื”ืื˜ ืงื™ื™ืŸ ืงื™ื ื“ืขืจ, ื“ืึธืก ืžื™ื˜ืœ ืึทื– ืขืก ืื™ื– ืึท ื‘ืœืึทื˜. ื“ืขืจื™ื‘ืขืจ, ืื™ืจ ืงืขื ืขืŸ ืคืฉื•ื˜ ืฉื˜ืขืœืŸ ื“ื™ 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 (ืœืึธื’ (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;
    }

ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ - ืึธ (ืœืึธื’ (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). ื“ืึธืก ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ื•ื•ื™ื›ื˜ื™ืง, ืื™ืŸ ืžื™ื™ืŸ ืžื™ื™ื ื•ื ื’, ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื– ืคื•ืŸ ื‘ื™ื™ื ืขืจื™ ื‘ื™ื™ืžืขืจ.

ื‘ืœื•ื™ื– ืจืขื’ื™ืกื˜ืจื™ืจื˜ ื ื™ืฆืขืจืก ืงืขื ืขืŸ ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ ืื™ืŸ ื“ื™ ื™ื‘ืขืจื‘ืœื™ืง. ืกื™ื™ืŸ ืืจื™ื™ืŸื‘ื™ื˜ืข.

ืื™ืš ื”ืื‘ ื ื™ืฉื˜ ื’ืขื•ื•ืขืŸ ืื•ื™ืฃ ื“ื™ ื›ืึทื‘ ืคึฟืึทืจ ื–ื™ื™ืขืจ ืœืึทื ื’, ืื•ืŸ ืื™ืš ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื•ื•ื™ืกืŸ ื•ื•ืึธืก ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ื˜ืขืžืขืก ื•ื•ืึธืœื˜ ืื™ืจ ื•ื•ื™ ืฆื• ื–ืขืŸ ืžืขืจ?

  • ื“ืึทื˜ืึท ืกื˜ืจืึทืงื˜ืฉืขืจื–

  • ืึทืœื’ืขืจื™ื“ืึทืžื– (ื“ืคึผ, ืจืขืงื•ืจืกื™ืึธืŸ, ื“ืึทื˜ืŸ ืงืึทืžืคึผืจืขืฉืึทืŸ, ืืื–"ื• ื•)

  • ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืคื•ืŸ ื“ืึทื˜ืŸ ืกื˜ืจืึทืงื˜ืฉืขืจื– ืื•ืŸ ืึทืœื’ืขืจื™ื“ืึทืžื– ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืœืขื‘ืŸ

  • ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืึทื ื“ืจื•ื™ื“ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ ื–'ืื‘ื

  • ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ื•ื•ืขื‘ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ Java

2 ื™ื•ื–ืขืจื– ื•ื•ืึธื•ื˜ืึทื“. 1 ื‘ืื ื•ืฆืขืจ ื”ืื˜ ื–ื™ืš ืืคื’ืขื”ืืœื˜ืŸ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’