เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€ เจœเจพเจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจŸเฉเจฐเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจนเฉˆ

เจชเฉเจฐเฉ€เจค เจ•เจฐเฉ‹

เจ‡เจน เจฒเฉ‡เจ– เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจฐเฉเฉฑเจ–เจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจนเจพเจฒ เจนเฉ€ เจตเจฟเฉฑเจš เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจฒเฉ‡เจ– เจ•เฉ€เจคเจพ เจนเจซเจฎเฉˆเจจ เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจกเฉ‡เจŸเจพ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ. เจ‰เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจฐเฉเฉฑเจ–เจพเจ‚ 'เจคเฉ‡ เจœเจผเจฟเจ†เจฆเจพ เจงเจฟเจ†เจจ เจจเจนเฉ€เจ‚ เจฆเจฟเฉฑเจคเจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ–เฉ‹เจœ, เจธเฉฐเจฎเจฟเจฒเจจ เจ…เจคเฉ‡ เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจขเฉเจ•เจตเฉ‡เจ‚ เจจเจนเฉ€เจ‚ เจธเจจเฅค เจนเฉเจฃ เจฎเฉˆเจ‚ เจฐเฉเฉฑเจ–เจพเจ‚ เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจฒเฉ‡เจ– เจฒเจฟเจ–เจฃ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ. เจ†เจ“ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจเฅค

เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ•เจฟเจจเจพเจฐเจฟเจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจœเฉเฉœเฉ‡ เจจเฉ‹เจก เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจ•เจนเจฟ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจ‡เฉฑเจ• เจ—เฉเจฐเจพเจซ เจฆเจพ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจ•เฉ‡เจธ เจนเฉˆ. เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจฐเฉเฉฑเจ– เจนเฉˆ:

เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€ เจœเจพเจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจŸเฉเจฐเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจนเฉˆ

เจ‡เจน เจ‡เฉฑเจ• เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจฐเฉเฉฑเจ– เจจเจนเฉ€เจ‚ เจนเฉˆ! เจธเจญ เจ•เฉเจ เจ•เฉฑเจŸเจฟเจ† เจ—เจฟเจ† เจนเฉˆ!

เจชเจฐเจฟเจญเจพเจธเจผเจพ

เจฐเฉ‚เจŸ

เจฐเฉเฉฑเจ– เจฆเฉ€ เจœเฉœเฉเจน - เจ‡เจน เจ‡เจธเจฆเจพ เจธเจญ เจคเฉ‹เจ‚ เจ‰เฉฑเจšเจพ เจจเฉ‹เจก เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจ‡เจน เจจเฉ‹เจก เจ เจนเฉˆเฅค เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš, เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจฎเจพเจฐเจ— เจฐเฉ‚เจŸ เจคเฉ‹เจ‚ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจจเฉ‹เจก เจคเฉฑเจ• เจฒเฉˆ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ! เจตเจพเจธเจคเจต เจตเจฟเฉฑเจš, เจ•เจฟเจธเฉ‡ เจตเฉ€ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ‡เจธ เจจเฉ‹เจก เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจธเจฌเจŸเฉเจฐเฉ€ เจฆเจพ เจฎเฉ‚เจฒ เจฎเฉฐเจจเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจฎเจพเจคเจพ-เจชเจฟเจคเจพ/เจ”เจฒเจพเจฆ

เจฐเฉ‚เจŸ เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡ เจธเจพเจฐเฉ‡ เจจเฉ‹เจกเจพเจ‚ เจฆเจพ เจฌเจฟเจฒเจ•เฉเจฒ เจ‡เฉฑเจ• เจ•เจฟเจจเจพเจฐเจพ เจฆเฉ‚เจœเฉ‡ เจจเฉ‹เจก เจตเฉฑเจฒ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจฎเฉŒเจœเฉ‚เจฆเจพ เจฆเฉ‡ เจ‰เฉฑเจชเจฐ เจธเจฅเจฟเจค เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจ‡เจน เจจเฉ‹เจก. เจฎเฉŒเจœเฉ‚เจฆเจพ เจจเฉ‹เจก เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจธเจฅเจฟเจค เจ…เจคเฉ‡ เจ‡เจธ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจ‡เฉฑเจ• เจจเฉ‹เจก เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจตเฉฐเจธเจผเจœ เจ‡เจน เจจเฉ‹เจก. เจ†เจ“ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ€เจ. เจšเจฒเฉ‹ เจจเฉ‹เจก เจฌเฉ€ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚, เจซเจฟเจฐ เจ‡เจธเจฆเฉ‡ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจจเฉ‹เจก เจ เจนเฉ‹เจฃเจ—เฉ‡, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจฌเฉฑเจšเฉ‡ เจจเฉ‹เจก เจกเฉ€, เจˆ เจ…เจคเฉ‡ เจเฉฑเจซ เจนเฉ‹เจฃเจ—เฉ‡เฅค

เจฒเฉ€เจซ

เจ‡เฉฑเจ• เจจเฉ‹เจก เจœเจฟเจธ เจฆเฉ‡ เจ•เฉ‹เจˆ เจฌเฉฑเจšเฉ‡ เจจเจนเฉ€เจ‚ เจนเจจ, เจจเฉ‚เฉฐ เจฐเฉเฉฑเจ– เจฆเจพ เจชเฉฑเจคเจพ เจ•เจฟเจนเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจชเฉฑเจคเฉ‡ 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;
    }
//...ะพัั‚ะฐะปัŒะฝั‹ะต ะผะตั‚ะพะดั‹ ัƒะทะปะฐ
}

เจนเจฐเฉ‡เจ• เจจเฉ‹เจก เจตเจฟเฉฑเจš เจฆเฉ‹ เจฌเฉฑเจšเฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ (เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจธเฉฐเจญเจต เจนเฉˆ เจ•เจฟ เจฒเฉˆเจซเจŸเจšเจพเจˆเจฒเจก เจ…เจคเฉ‡/เจœเจพเจ‚ เจฐเจพเจˆเจŸเจšเจพเจˆเจฒเจก เจฌเฉฑเจšเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเจฒ เจฎเฉเฉฑเจฒ เจนเฉ‹เจตเฉ‡เจ—เจพ)เฅค เจคเฉเจธเฉ€เจ‚ เจธเจผเจพเจ‡เจฆ เจฎเจนเจฟเจธเฉ‚เจธ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจจเฉฐเจฌเจฐ เจกเฉ‡เจŸเจพ เจจเฉ‹เจก เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจกเฉ‡เจŸเจพ เจนเฉˆ; เจ•เฉเฉฐเจœเฉ€ - เจจเฉ‹เจก เจ•เฉเฉฐเจœเฉ€.

เจ…เจธเฉ€เจ‚ เจ—เฉฐเจขเจพเจ‚ เจจเฉ‚เฉฐ เจ›เจพเจ‚เจŸ เจฒเจฟเจ† เจนเฉˆ, เจนเฉเจฃ เจฆเจฐเจ–เจคเจพเจ‚ เจฌเจพเจฐเฉ‡ เจฆเจฌเจพเจ‰เจฃ เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚. เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, "เจฐเฉเฉฑเจ–" เจธเจผเจฌเจฆ เจฆเฉเจ†เจฐเจพ เจฎเฉ‡เจฐเจพ เจฎเจคเจฒเจฌ เจ‡เฉฑเจ• เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจฐเฉเฉฑเจ– เจฆเฉ€ เจงเจพเจฐเจจเจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจฌเจพเจˆเจจเจฐเฉ€ เจฐเฉเฉฑเจ– เจฌเจฃเจคเจฐ:

public class BinaryTree<T> {
     private Node<T> root;

    //ะผะตั‚ะพะดั‹ ะดะตั€ะตะฒะฐ
}

เจธเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจ•เจฒเจพเจธ เจซเฉ€เจฒเจก เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจŸเฉเจฐเฉ€ เจฆเฉ‡ เจฐเฉ‚เจŸ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฐเฉ‚เจŸ เจคเฉ‹เจ‚, getLeftChild() เจ…เจคเฉ‡ getRightChild() เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจคเฉเจธเฉ€เจ‚ เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจตเฉ€ เจจเฉ‹เจก เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ

ะŸะพะธัะบ

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจฌเจฃเจพเจ‡เจ† เจฐเฉเฉฑเจ– เจนเฉˆเฅค เจ•เฉเฉฐเจœเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจคเฉฑเจค เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฒเฉฑเจญเจฃเจพ เจนเฉˆ? เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจฐเจฎเจตเจพเจฐ เจฐเฉ‚เจŸ เจคเฉ‹เจ‚ เจฐเฉเฉฑเจ– เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจœเจพเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ…เจคเฉ‡ เจ…เจ—เจฒเฉ‡ เจจเฉ‹เจก เจฆเฉ€ เจ•เฉเฉฐเจœเฉ€ เจจเจพเจฒ เจ•เฉเฉฐเจœเฉ€ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐเจจเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆ: เจœเฉ‡เจ•เจฐ เจ•เฉเฉฐเจœเฉ€ เจ…เจ—เจฒเฉ‡ เจจเฉ‹เจก เจฆเฉ€ เจ•เฉเฉฐเจœเฉ€ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจนเฉˆ, เจคเจพเจ‚ เจจเฉ‹เจก เจฆเฉ‡ เจ–เฉฑเจฌเฉ‡ เจšเจพเจˆเจฒเจก 'เจคเฉ‡ เจœเจพเจ“, เจœเฉ‡เจ•เจฐ เจ‡เจน เจนเฉˆ เจนเฉ‹เจฐ, เจธเฉฑเจœเฉ‡ เจชเจพเจธเฉ‡, เจœเฉ‡เจ•เจฐ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฌเจฐเจพเจฌเจฐ เจนเจจ, เจคเจพเจ‚ เจฒเฉ‹เฉœเฉ€เจฆเจพ เจจเฉ‹เจก เจฒเฉฑเจญเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ! เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เฉ‹เจก:

public Node<T> find(int key) {
    Node<T> current = root;
    while (current.getKey() != key) {
        if (key < current.getKey())
            current = current.getLeftChild();
        else
            current = current.getRightChild();
        if (current == null)
            return null;
    }
    return current;
}

เจœเฉ‡ เจ•เจฐเฉฐเจŸ เจจเจฒ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ–เฉ‹เจœ เจฆเจฐเฉฑเจ–เจค เจฆเฉ‡ เจ…เฉฐเจค เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ—เจˆ เจนเฉˆ (เจ‡เฉฑเจ• เจธเฉฐเจ•เจฒเจชเจฟเจ• เจชเฉฑเจงเจฐ 'เจคเฉ‡, เจคเฉเจธเฉ€เจ‚ เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจฎเฉŒเจœเฉ‚เจฆ เจธเจฅเจพเจจ' เจคเฉ‡ เจนเฉ‹ - เจ‡เฉฑเจ• เจชเฉฑเจคเฉ‡ เจฆเฉ‡ เจตเฉฐเจธเจผเจœ).

เจ†เจ‰ เจ‡เฉฑเจ• เจธเฉฐเจคเฉเจฒเจฟเจค เจฐเฉเฉฑเจ– (เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจœเจฟเจธ เจตเจฟเฉฑเจš เจจเฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉฑเจง เจœเจพเจ‚ เจ˜เฉฑเจŸ เจฌเจฐเจพเจฌเจฐ เจตเฉฐเจกเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ) 'เจคเฉ‡ เจ–เฉ‹เจœ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจฆเฉ€ เจชเฉเจฐเจญเจพเจตเจธเจผเฉ€เจฒเจคเจพ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเฉ€เจเฅค เจซเจฟเจฐ เจ–เฉ‹เจœ เจ•เฉเจธเจผเจฒเจคเจพ O(log(n)) เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจ…เจคเฉ‡ เจฒเจ˜เฉ‚เจ—เจฃเจ• เจฌเฉ‡เจธ 2 เจนเฉˆเฅค เจฆเฉ‡เจ–เฉ‹: เจœเฉ‡เจ•เจฐ เจธเฉฐเจคเฉเจฒเจฟเจค เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš n เจคเฉฑเจค เจนเจจ, เจคเจพเจ‚ เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจฒเฉŒเจ—(n) เจคเฉ‹เจ‚ เจฌเฉ‡เจธ 2 เจชเฉฑเจงเจฐ เจนเฉ‹เจฃเจ—เฉ‡เฅค เจฐเฉเฉฑเจ– เจ…เจคเฉ‡ เจ–เฉ‹เจœ เจตเจฟเฉฑเจš, เจšเฉฑเจ•เจฐ เจฆเฉ‡ เจ‡เฉฑเจ• เจชเฉœเจพเจ… เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจชเฉฑเจงเจฐ เจนเฉ‡เจ เจพเจ‚ เจœเจพเจ‚เจฆเฉ‡ เจนเฉ‹เฅค

เจชเจพเจ‰

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ–เฉ‹เจœ เจฆเฉ‡ เจธเจพเจฐ เจจเฉ‚เฉฐ เจธเจฎเจเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจธเฉฐเจฎเจฟเจฒเจจ เจจเฉ‚เฉฐ เจธเจฎเจเจฃเจพ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ”เจ–เจพ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจฆเจฐเฉฑเจ–เจค เจฆเฉ‡ เจ‡เฉฑเจ• เจชเฉฑเจคเฉ‡ (เจ–เฉ‹เจœ เจตเจฟเฉฑเจš เจตเจฐเจฃเจฟเจค เจ‰เจคเจฐเจจ เจจเจฟเจฏเจฎเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ) เจนเฉ‡เจ เจพเจ‚ เจœเจพเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจฌเจฃเฉ‹ - เจ–เฉฑเจฌเฉ‡ เจœเจพเจ‚ เจธเฉฑเจœเฉ‡, เจ•เฉเฉฐเจœเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡. เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ:

   public void insert(T insertData, int key) {
        Node<T> current = root;
        Node<T> parent;
        Node<T> newNode = new Node<>(insertData, key);
        if (root == null)
            root = newNode;
        else {
            while (true) {
                parent = current;
                if (key < current.getKey()) {
                    current = current.getLeftChild();
                    if (current == null) {
                         parent.setLeftChild(newNode);
                         return;
                    }
                }
                else {
                    current = current.getRightChild();
                    if (current == null) {
                        parent.setRightChild(newNode);
                        return;
                    }
                }
            }
        }
    }

เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจฎเฉŒเจœเฉ‚เจฆเจพ เจจเฉ‹เจก เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฎเฉŒเจœเฉ‚เจฆเจพ เจจเฉ‹เจก เจฆเฉ‡ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ. เจœเจฆเฉ‹เจ‚ เจ•เจฐเฉฐเจŸ null เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจชเฉ‡เจฐเฉˆเจ‚เจŸ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจ‰เจน เจธเจผเฉ€เจŸ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจœเจฟเจธเจฆเฉ€ เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‹เฉœ เจนเฉˆเฅค
เจธเฉฐเจฎเจฟเจฒเจจ เจฆเฉ€ เจ•เฉเจธเจผเจฒเจคเจพ เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจ–เฉ‹เจœ - O(log(n)) เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค

เจนเจŸเจพเจ‰เจฃ

เจนเจŸเจพเจ‰เจฃเจพ เจธเจญ เจคเฉ‹เจ‚ เจ”เจ–เจพ เจ“เจชเจฐเฉ‡เจธเจผเจจ เจนเฉˆ เจœเจฟเจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– 'เจคเฉ‡ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจชเจนเจฟเจฒเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ เจ‰เจน เจคเฉฑเจค เจฒเฉฑเจญเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉ‹เจเจ—เฉ€ เจœเจฟเจธ เจจเฉ‚เฉฐ เจ…เจธเฉ€เจ‚ เจฎเจฟเจŸเจพเจ‰เจฃ เจœเจพ เจฐเจนเฉ‡ เจนเจพเจ‚. เจชเจฐ เจซเจฟเจฐ เจ•เฉ€? เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ‡ เจธเฉฐเจฆเจฐเจญ เจจเฉ‚เฉฐ null 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‰เจธ เจธเจฌเจŸเฉเจฐเฉ€ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ—เฉเจ† เจฆเฉ‡เจตเจพเจ‚เจ—เฉ‡ เจœเจฟเจธ เจฆเจพ เจ‡เจน เจจเฉ‹เจก เจฐเฉ‚เจŸ เจนเฉˆเฅค เจฐเฉเฉฑเจ–เจพเจ‚ เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃ เจฆเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจคเจฟเฉฐเจจ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค

เจชเจนเจฟเจฒเจพ เจ•เฉ‡เจธ. เจฎเจฟเจŸเจพเจ เจœเจพ เจฐเจนเฉ‡ เจจเฉ‹เจก เจฆเจพ เจ•เฉ‹เจˆ เจฌเฉฑเจšเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ

เจœเฉ‡เจ•เจฐ เจฎเจฟเจŸเจพเจ เจœเจพ เจฐเจนเฉ‡ เจจเฉ‹เจก เจฆเฉ‡ เจ•เฉ‹เจˆ เจฌเฉฑเจšเฉ‡ เจจเจนเฉ€เจ‚ เจนเจจ, เจคเจพเจ‚ เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจ‡เจน เจ‡เฉฑเจ• เจชเฉฑเจคเจพ เจนเฉˆเฅค เจ‡เจธเจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจฌเจธ เจ‡เจธเจฆเฉ‡ เจชเฉ‡เจฐเฉˆเจ‚เจŸ เจฆเฉ‡ เจฒเฉˆเจซเจŸเจšเจพเจˆเจฒเจก เจœเจพเจ‚ เจฐเจพเจˆเจŸเจšเจพเจˆเจฒเจก เจซเฉ€เจฒเจก เจจเฉ‚เฉฐ null เจคเฉ‡ เจธเฉˆเจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจฆเฉ‚เจœเจพ เจ•เฉ‡เจธ. เจฎเจฟเจŸเจพเจ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจจเฉ‹เจก เจฆเจพ เจ‡เฉฑเจ• เจฌเฉฑเจšเจพ เจนเฉˆ

เจ‡เจน เจฎเจพเจฎเจฒเจพ เจตเฉ€ เจฌเจนเฉเจคเจพ เจชเฉ‡เจšเฉ€เจฆเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ†เจ‰ เจ†เจชเจฃเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจตเฉฑเจฒ เจฎเฉเฉœเฉ€เจเฅค เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ•เฉเฉฐเจœเฉ€ 14 เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจเจฒเฉ€เจฎเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจธเจนเจฟเจฎเจคเฉ€ เจฆเจฟเจ“ เจ•เจฟ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจ•เฉเฉฐเจœเฉ€ 10 เจตเจพเจฒเฉ‡ เจจเฉ‹เจก เจฆเจพ เจธเจนเฉ€ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจฆเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจ”เจฒเจพเจฆ (เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจธเจนเฉ€) เจ•เฉ‹เจฒ 10 เจคเฉ‹เจ‚ เจตเฉฑเจง เจ‡เฉฑเจ• เจ•เฉเฉฐเจœเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจ‡เจธ เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจธเจพเจจเฉ€ เจจเจพเจฒ เจฐเฉเฉฑเจ– เจคเฉ‹เจ‚ "เจ•เฉฑเจŸ" เจธเจ•เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจฎเจฟเจŸเจพเจ เจœเจพ เจฐเจนเฉ‡ เจจเฉ‹เจก เจฆเฉ‡ เจฌเฉฑเจšเฉ‡ เจจเจพเจฒ เจœเฉ‹เฉœ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจ•เฉเฉฐเจœเฉ€ 10 เจจเจพเจฒ เจจเฉ‹เจก 13 เจจเจพเจฒ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเฉ‹เฅค เจธเจฅเจฟเจคเฉ€ เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจœเฉ‡เจ•เจฐ เจ‡เฉฑเจ• เจจเฉ‹เจก เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจฃเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉเฉฐเจฆเจพ เจœเฉ‹ เจ‡เจธเจฆเฉ‡ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจฆเจพ เจ–เฉฑเจฌเจพ เจฌเฉฑเจšเจพ เจนเฉˆเฅค เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ†เจชเจฃเฉ‡ เจ†เจช เจธเฉ‹เจšเฉ‹ - เจ‡เฉฑเจ• เจธเจนเฉ€ เจธเจฎเจพเจจเจคเจพ.

เจคเฉ€เจœเจพ เจ•เฉ‡เจธ. เจ‡เฉฑเจ• เจจเฉ‹เจก เจฆเฉ‡ เจฆเฉ‹ เจฌเฉฑเจšเฉ‡ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ

เจธเจญ เจคเฉ‹เจ‚ เจ”เจ–เจพ เจ•เฉ‡เจธ. เจ†เจ‰ เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡เจ–เฉ€เจเฅค

เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€ เจœเจพเจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจŸเฉเจฐเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจนเฉˆ

เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเฉ‹

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ•เฉเฉฐเจœเฉ€ 25 เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจจเฉ‹เจก เจจเฉ‚เฉฐ เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจธเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจฅเจพเจ‚ เจ•เจฟเจธ เจจเฉ‚เฉฐ เจฐเฉฑเจ–เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ? เจ‰เจธ เจฆเฉ‡ เจ…เจจเฉเจฏเจพเจˆเจ†เจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• (เจ‰เจฒเจพเจฆ เจœเจพเจ‚ เจ”เจฒเจพเจฆ เจฆเฉ€ เจ”เจฒเจพเจฆ) เจฌเจฃเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€(เจ‰เจน เจœเฉ‹ เจจเฉ‹เจก เจจเฉ‚เฉฐ เจนเจŸเจพเจ เจœเจพเจฃ เจฆเฉ€ เจฅเจพเจ‚ เจฒเจตเฉ‡เจ—เจพ)เฅค

เจ‡เจน เจ•เจฟเจตเฉ‡เจ‚ เจธเจฎเจเจฃเจพ เจนเฉˆ เจ•เจฟ เจ•เฉŒเจฃ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจฌเจฃเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ? เจ…เจจเฉเจญเจตเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจน เจŸเฉเจฐเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเฉ‹เจก เจนเฉˆ เจœเจฟเจธเจฆเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฎเจฟเจŸเจพเจ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจจเฉ‹เจก เจคเฉ‹เจ‚ เจ…เจ—เจฒเฉ€ เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจกเฉ€ เจนเฉˆเฅค เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉˆเฅค เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจธเฉฑเจœเฉ‡ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ (เจนเจฎเฉ‡เจธเจผเจพ เจธเฉฑเจœเฉ‡ เจชเจพเจธเฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจฟเจนเจพ เจœเจพ เจšเฉเฉฑเจ•เจพ เจนเฉˆ เจ•เจฟ เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจ•เฉเฉฐเจœเฉ€ เจฎเจฟเจŸเจพเจ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจจเฉ‹เจก เจฆเฉ€ เจ•เฉเฉฐเจœเฉ€ เจจเจพเจฒเฉ‹เจ‚ เจตเฉฑเจกเฉ€ เจนเฉˆ) 'เจคเฉ‡ เจœเจพเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธ เจธเฉฑเจœเฉ‡ เจตเฉฐเจธเจผ เจฆเฉ‡ เจ–เฉฑเจฌเฉ‡ เจตเฉฐเจธเจผ เจฆเฉ€ เจฒเฉœเฉ€ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจฒเฉฐเจ˜เฉ‹เฅค . เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ•เฉเฉฐเจœเฉ€ 35 เจฆเฉ‡ เจจเจพเจฒ เจจเฉ‹เจก 'เจคเฉ‡ เจœเจพเจตเจพเจ‚เจ—เฉ‡, เจ…เจคเฉ‡ เจซเจฟเจฐ เจ‡เจธเจฆเฉ‡ เจ–เฉฑเจฌเฉ‡ เจฌเฉฑเจšเจฟเจ†เจ‚ เจฆเฉ€ เจšเฉ‡เจจ เจฐเจพเจนเฉ€เจ‚ เจชเฉฑเจคเฉ‡ เจคเฉฑเจ• เจนเฉ‡เจ เจพเจ‚ เจœเจพเจตเจพเจ‚เจ—เฉ‡ - เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจ‡เจธ เจšเฉ‡เจจ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ 30 เจ•เฉเฉฐเจœเฉ€ เจตเจพเจฒเจพ เจจเฉ‹เจก เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจธเจ–เจคเฉ€ เจจเจพเจฒ เจฌเฉ‹เจฒเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจฆเฉ‡เจ– เจฐเจนเฉ‡ เจนเจพเจ‚ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ‡ เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจธเจญ เจคเฉ‹เจ‚ เจ›เฉ‹เจŸเฉ‡ เจจเฉ‹เจก เจฒเจˆ เจœเจฟเจธ เจจเฉ‚เฉฐ เจ…เจธเฉ€เจ‚ เจจเฉ‹เจก เจฆเฉ€ เจญเจพเจฒ เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚ เจ‰เจธ เจคเฉ‹เจ‚ เจตเฉฑเจกเฉ‡ เจจเฉ‹เจก เจฒเจˆเฅค

เจฌเจพเจˆเจจเจฐเฉ€ เจŸเฉเจฐเฉ€ เจœเจพเจ‚ เจฌเจพเจˆเจจเจฐเฉ€ เจ–เฉ‹เจœ เจŸเฉเจฐเฉ€ เจ•เจฟเจตเฉ‡เจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจจเจพ เจนเฉˆ

เจ‰เฉฑเจคเจฐเจพเจงเจฟเจ•เจพเจฐเฉ€ เจ–เฉ‹เจœ เจตเจฟเจงเฉ€ เจ•เฉ‹เจก:

    public Node<T> getSuccessor(Node<T> deleteNode) {
        Node<T> parentSuccessor = deleteNode;//ั€ะพะดะธั‚ะตะปัŒ ะฟั€ะตะตะผะฝะธะบะฐ
        Node<T> successor = deleteNode;//ะฟั€ะตะตะผะฝะธะบ
        Node<T> current = successor.getRightChild();//ะฟั€ะพัั‚ะพ "ะฟั€ะพะฑะตะณะฐัŽั‰ะธะน" ัƒะทะตะป
        while (current != null) {
            parentSuccessor = successor;
            successor = current;
            current = current.getLeftChild();
        }
        //ะฝะฐ ะฒั‹ั…ะพะดะต ะธะท ั†ะธะบะปะฐ ะธะผะตะตะผ ะฟั€ะตะตะผะฝะธะบะฐ ะธ ั€ะพะดะธั‚ะตะปั ะฟั€ะตะตะผะฝะธะบะฐ
        if (successor != deleteNode.getRightChild()) {//ะตัะปะธ ะฟั€ะตะตะผะฝะธะบ ะฝะต ัะพะฒะฟะฐะดะฐะตั‚ ั ะฟั€ะฐะฒั‹ะผ ะฟะพั‚ะพะผะบะพะผ ัƒะดะฐะปัะตะผะพะณะพ ัƒะทะปะฐ
            parentSuccessor.setLeftChild(successor.getRightChild());//ั‚ะพ ะตะณะพ ั€ะพะดะธั‚ะตะปัŒ ะทะฐะฑะธั€ะฐะตั‚ ัะตะฑะต ะฟะพั‚ะพะผะบะฐ ะฟั€ะตะตะผะฝะธะบะฐ, ั‡ั‚ะพะฑั‹ ะฝะต ะฟะพั‚ะตั€ัั‚ัŒ ะตะณะพ
            successor.setRightChild(deleteNode.getRightChild());//ัะฒัะทั‹ะฒะฐะตะผ ะฟั€ะตะตะผะฝะธะบะฐ ั ะฟั€ะฐะฒั‹ะผ ะฟะพั‚ะพะผะบะพะผ ัƒะดะฐะปัะตะผะพะณะพ ัƒะทะปะฐ
        }
        return successor;
    }

เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ€ เจตเจฟเจงเฉ€ เจฒเจˆ เจชเฉ‚เจฐเจพ เจ•เฉ‹เจก:

public boolean delete(int deleteKey) {
        Node<T> current = root;
        Node<T> parent = current;
        boolean isLeftChild = false;//ะ’ ะทะฐะฒะธัะธะผะพัั‚ะธ ะพั‚ ั‚ะพะณะพ, ัะฒะปัะตั‚ัั ะปะธ  ัƒะดะฐะปัะตะผั‹ะน ัƒะทะตะป ะปะตะฒั‹ะผ ะธะปะธ ะฟั€ะฐะฒั‹ะผ ะฟะพั‚ะพะผะบะพะผ ัะฒะพะตะณะพ ั€ะพะดะธั‚ะตะปั, ะฑัƒะปะตะฒัะบะฐั ะฟะตั€ะตะผะตะฝะฝะฐั isLeftChild ะฑัƒะดะตั‚ ะฟั€ะธะฝะธะผะฐั‚ัŒ ะทะฝะฐั‡ะตะฝะธะต true ะธะปะธ false ัะพะพั‚ะฒะตั‚ัั‚ะฒะตะฝะฝะพ.
        while (current.getKey() != deleteKey) {
            parent = current;
            if (deleteKey < current.getKey()) {
                current = current.getLeftChild();
                isLeftChild = true;
            } else {
                isLeftChild = false;
                current = current.getRightChild();
            }
            if (current == null)
                return false;
        }

        if (current.getLeftChild() == null && current.getRightChild() == null) {//ะฟะตั€ะฒั‹ะน ัะปัƒั‡ะฐะน
            if (current == root)
                current = null;
            else if (isLeftChild)
                parent.setLeftChild(null);
            else
                parent.setRightChild(null);
        }
        else if (current.getRightChild() == null) {//ะฒั‚ะพั€ะพะน ัะปัƒั‡ะฐะน
            if (current == root)
                root = current.getLeftChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getLeftChild());
            else
                current.setRightChild(current.getLeftChild());
        } else if (current.getLeftChild() == null) {
            if (current == root)
                root = current.getRightChild();
            else if (isLeftChild)
                parent.setLeftChild(current.getRightChild());
            else
                parent.setRightChild(current.getRightChild());
        } 
        else {//ั‚ั€ะตั‚ะธะน ัะปัƒั‡ะฐะน
            Node<T> successor = getSuccessor(current);
            if (current == root)
                root = successor;
            else if (isLeftChild)
                parent.setLeftChild(successor);
            else
                parent.setRightChild(successor);
        }
        return true;
    }

เจ—เฉเฉฐเจเจฒเจคเจพ เจจเฉ‚เฉฐ O(log(n)) เจคเฉฑเจ• เจฒเจ—เจญเจ— เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง/เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฒเฉฑเจญเจฃเจพ

เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ/เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจฎเฉเฉฑเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจฒเฉฑเจญเจฃเจพ เจนเฉˆ - เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจฐเจฎเจตเจพเจฐ เจฆเจฐเฉฑเจ–เจค เจฆเฉ‡ เจ–เฉฑเจฌเฉ‡/เจธเฉฑเจœเฉ‡ เจคเฉฑเจคเจพเจ‚ เจฆเฉ€ เจฒเฉœเฉ€ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจœเจพเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ; เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจธเจผเฉ€เจŸ 'เจคเฉ‡ เจชเจนเฉเฉฐเจšเจฆเฉ‡ เจนเฉ‹, เจ‡เจน เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ/เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจคเฉฑเจค เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

    public Node<T> getMinimum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getLeftChild();
        }
        return parent;
    }

    public Node<T> getMaximum(Node<T> startPoint) {
        Node<T> current = startPoint;
        Node<T> parent = current;
        while (current != null) {
            parent = current;
            current = current.getRightChild();
        }
        return parent;
    }

เจœเจŸเจฟเจฒเจคเจพ - O(log(n))

เจธเจฎเจฎเจฟเจคเฉ€ เจฌเจพเจˆเจชเจพเจธ

เจŸเฉเจฐเฉˆเจตเจฐเจธเจฒ เจ‡เจธ เจจเจพเจฒ เจ•เฉเจ เจ•เจพเจฐเจตเจพเจˆ เจ•เจฐเจจ เจฒเจˆ เจฐเฉเฉฑเจ– เจฆเฉ‡ เจนเจฐเฉ‡เจ• เจจเฉ‹เจก เจฆเจพ เจฆเฉŒเจฐเจพ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค

เจ†เจตเจฐเจคเฉ€ เจธเจฎเจฎเจฟเจคเฉ€ เจŸเฉเจฐเจพเจตเจฐเจธเจฒ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ:

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

PS

O(n) เจคเฉฑเจ• เจกเฉ€เจœเจจเจฐเฉ‡เจธเจผเจจ

เจคเฉเจนเจพเจกเฉ‡ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ•เจˆเจ†เจ‚ เจจเฉ‡ เจฆเฉ‡เจ–เจฟเจ† เจนเฉ‹เจตเฉ‡เจ—เจพ: เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจจเฉ‚เฉฐ เจ…เจธเฉฐเจคเฉเจฒเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹ เจคเจพเจ‚ เจ•เฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ? เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฐเฉเฉฑเจ– เจตเจฟเฉฑเจš เจตเจงเจฆเฉ€เจ†เจ‚ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจจเฉ‹เจกเจธ เจชเจพเจ“: 1,2,3,4,5,6... เจซเจฟเจฐ เจฐเฉเฉฑเจ– เจ•เฉเจ เจนเฉฑเจฆ เจคเฉฑเจ• เจฒเจฟเฉฐเจ•เจก เจธเฉ‚เจšเฉ€ เจตเจฐเจ—เจพ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจ…เจคเฉ‡ เจนเจพเจ‚, เจฐเฉเฉฑเจ– เจ†เจชเจฃเฉ€ เจฐเฉเฉฑเจ– เจฆเฉ€ เจฌเจฃเจคเจฐ เจจเฉ‚เฉฐ เจ—เฉเจ† เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ‡เจธเจฒเจˆ เจกเฉ‡เจŸเจพ เจเจ•เจธเฉˆเจธ เจฆเฉ€ เจ•เฉเจธเจผเจฒเจคเจพ. เจ–เฉ‹เจœ, เจธเฉฐเจฎเจฟเจฒเจจ เจ…เจคเฉ‡ เจฎเจฟเจŸเจพเจ‰เจฃ เจฆเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจฆเฉ€ เจ—เฉเฉฐเจเจฒเจคเจพ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจ•เฉ€เจคเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจธเจฎเจพเจจ เจฌเจฃ เจœเจพเจตเฉ‡เจ—เฉ€: O(n). เจ‡เจน เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ, เจฎเฉ‡เจฐเฉ€ เจฐเจพเจ เจตเจฟเฉฑเจš, เจฌเจพเจˆเจจเจฐเฉ€ เจฐเฉเฉฑเจ–เจพเจ‚ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ.

เจธเจฟเจฐเจซเจผ เจฐเจœเจฟเจธเจŸเจฐเจก เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจนเฉ€ เจธเจฐเจตเฉ‡เจ–เจฃ เจตเจฟเฉฑเจš เจนเจฟเฉฑเจธเจพ เจฒเฉˆ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจธเจพเจˆเจจ - เจ‡เจจ, เจคเฉเจนเจพเจกเจพ เจธเฉเจ†เจ—เจค เจนเฉˆ.

เจฎเฉˆเจ‚ เจฌเจนเฉเจค เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจนเฉฑเจฌ 'เจคเฉ‡ เจจเจนเฉ€เจ‚ เจนเจพเจ‚, เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจœเจพเจฃเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจนเฉœเฉ‡ เจตเจฟเจธเจผเจฟเจ†เจ‚ 'เจคเฉ‡ เจนเฉ‹เจฐ เจฒเฉ‡เจ– เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉ‹เจ—เฉ‡?

  • เจกเจพเจŸเจพ เจฌเจฃเจคเจฐ

  • เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ (เจกเฉ€เจชเฉ€, เจฐเฉ€เจ•เจฐเจธเจผเจจ, เจกเฉ‡เจŸเจพ เจ•เฉฐเจชเจฐเฉˆเจธเจผเจจ, เจ†เจฆเจฟ)

  • เจ…เจธเจฒ เจœเฉ€เจตเจจ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจ…เจคเฉ‡ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚

  • Java เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจ—เฉเจฐเจพเจฎเจฟเฉฐเจ— เจเจ‚เจกเจฐเจพเจ‡เจก เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ

  • Java เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจตเฉˆเฉฑเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ

2 เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจจเฉ‡ เจตเฉ‹เจŸ เจฆเจฟเฉฑเจคเฉ€เฅค 1 เจตเจฐเจคเฉ‹เจ‚เจ•เจพเจฐ เจฌเจšเจฟเจ†เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹