เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดŸเตเดฐเต€ เดŽเด™เตเด™เดจเต† เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดพเด‚

เดซเต‹เตผโ€Œเดชเตเดฒเต‡

เดˆ เดฒเต‡เด–เดจเด‚ เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดŸเตเดฐเต€เด•เดณเต† เด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณเดคเดพเดฃเต. เดžเดพเตป เด…เดŸเตเดคเตเดคเดฟเดŸเต† เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดฟ เดนเดซเตเดฎเดพเตป เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป. เด…เดตเดฟเดŸเต† เดžเดพเตป เดฌเตˆเดจเดฑเดฟ เดฎเดฐเด™เตเด™เตพ เดถเดฐเดฟเด•เตเด•เตเด‚ เดถเตเดฐเดฆเตเดงเดฟเดšเตเดšเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เดคเดฟเดฐเดฏเตฝ, เดคเดฟเดฐเตเด•เตฝ, เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตฝ เดฐเต€เดคเดฟเด•เตพ เดชเตเดฐเดธเด•เตเดคเดฎเดฒเตเดฒ. เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เดฎเดฐเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เด’เดฐเตเดชเด•เตเดทเต‡ เดžเด™เตเด™เตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚.

เด…เดฐเดฟเด•เตเด•เดณเดพเตฝ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดš เดจเต‹เดกเตเด•เตพ เด…เดŸเด™เตเด™เตเดจเตเดจ เด’เดฐเต เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเดฏเดพเดฃเต เดŸเตเดฐเต€. เด’เดฐเต เด—เตเดฐเดพเดซเดฟเดจเตเดฑเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เต‡เดธเดพเดฃเต เด’เดฐเต เดฎเดฐเด‚ เดŽเดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดชเดฑเดฏเดพเด‚. เด’เดฐเต เดตเตƒเด•เตเดทเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‡เดคเดพ:

เดฌเตˆเดจเดฑเดฟ เดŸเตเดฐเต€ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดŸเตเดฐเต€ เดŽเด™เตเด™เดจเต† เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดพเด‚

เด‡เดคเตŠเดฐเต เดฌเตˆเดจเดฑเดฟ เดธเต†เตผเดšเตเดšเต เดŸเตเดฐเต€ เด…เดฒเตเดฒ! เดŽเดฒเตเดฒเดพเด‚ เดตเต†เดŸเตเดŸเดฟเด•เตเด•เตเดฑเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต!

เดชเดฆเดพเดตเดฒเดฟ

เดฑเต‚เดŸเตเดŸเต

เดŸเตเดฐเต€ เดฑเต‚เดŸเตเดŸเต เดเดฑเตเดฑเดตเตเด‚ เด‰เดฏเตผเดจเตเดจ เดจเต‹เดกเต เด†เดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เด‡เดคเดพเดฃเต เดจเต‹เดกเต A. เดฎเดฐเดคเตเดคเดฟเตฝ, เด’เดฐเต เดชเดพเดคเดฏเตเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เดฑเต‚เดŸเตเดŸเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเต‚! เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดเดคเต เดจเต‹เดกเตเด‚ เดˆ เดจเต‹เดกเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดธเดฌเตเดŸเตเดฐเต€เดฏเตเดŸเต† เดฑเต‚เดŸเตเดŸเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเด‚.

เดฎเดพเดคเดพเดชเดฟเดคเดพเด•เตเด•เตพ/เดธเดจเตเดคเดคเดฟ

เดฑเต‚เดŸเตเดŸเต เด’เดดเดฟเด•เต†เดฏเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด’เดฐเต เดŽเดกเตเดœเต เดฎเดฑเตเดฑเตŠเดฐเต เดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเด•เตเด•เตเดจเตเดจเต. เดจเดฟเดฒเดตเดฟเดฒเต† เดจเต‹เดกเดฟเดจเต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเต‹เดกเดฟเดจเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต เดฐเด•เตเดทเดฟเดคเดพเดตเต เดˆ เดจเต‹เดกเต. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเดฟเดจเต เดคเดพเดดเต† เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดจเต‹เดกเต, เด…เดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดธเดจเตเดคเดคเดฟ เดˆ เดจเต‹เดกเต. เดจเดฎเตเด•เตเด•เต เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดŽเดŸเตเด•เตเด•เดพเด‚. เดจเต‹เดกเต เดฌเดฟ เดŽเดŸเตเด•เตเด•เตเด•, เด…เดชเตเดชเต‹เตพ เด…เดคเดฟเดจเตเดฑเต† เดชเดพเดฐเดจเตเดฑเต เดจเต‹เดกเต เดŽ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เด…เดคเดฟเดจเตเดฑเต† เด•เตเดŸเตเดŸเดฟเด•เตพ เดกเดฟ, เด‡, เดŽเดซเต เดŽเดจเตเดจเต€ เดจเต‹เดกเตเด•เตพ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เดฒเต€เดซเต

เด•เตเดŸเตเดŸเดฟเด•เดณเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดจเต‹เดกเดฟเดจเต† เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด‡เดฒ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดจเต‹เดกเตเด•เตพ 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() and 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 เด†เดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดˆ เดจเต‹เดกเต เดฑเต‚เดŸเตเดŸเต เด†เดฏ เดธเดฌเตเดŸเตเดฐเต€เดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเดฎเตเด•เตเด•เต เดจเดทเตโ€ŒเดŸเดฎเดพเด•เตเด‚. เดฎเดฐเด‚ เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเตฝ เดฐเต€เดคเดฟเด•เตพ เดฎเต‚เดจเตเดจเต เด•เต‡เดธเตเด•เดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด†เดฆเตเดฏ เด•เต‡เดธเต. เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดจเต‹เดกเดฟเดจเต เด•เตเดŸเตเดŸเดฟเด•เดณเดฟเดฒเตเดฒ.

เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดจเต‹เดกเดฟเดจเต เด•เตเดŸเตเดŸเดฟเด•เดณเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เด’เดฐเต เด‡เดฒเดฏเดพเดฃเต†เดจเตเดจเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเตเดฑเต† เดฐเด•เตเดทเดฟเดคเดพเดตเดฟเดจเตเดฑเต† เดฒเต†เดซเตเดฑเตเดฑเต เดšเตˆเตฝเดกเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฑเตˆเดฑเตเดฑเต เดšเตˆเตฝเดกเต เดซเต€เตฝเดกเตเด•เตพ เด…เดธเดพเดงเตเดตเดพเดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเด‚.

เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เด•เต‡เดธเต. เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดจเต‹เดกเดฟเดจเต เด’เดฐเต เด•เตเดŸเตเดŸเดฟเดฏเตเดฃเตเดŸเต

เดˆ เด•เต‡เดธเตเด‚ เดตเดณเดฐเต† เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ เด•เดพเดฐเตเดฏเดฎเดฒเตเดฒ. เดจเดฎเตเด•เตเด•เต เดจเดฎเตเดฎเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดพเด‚. เด•เต€ 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(เดฒเต‹เด—เต(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). เด‡เดคเต เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด’เดจเตเดจเดพเดฃเต, เดŽเดจเตเดฑเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เดฌเตˆเดจเดฑเดฟ เดฎเดฐเด™เตเด™เดณเตเดŸเต† เดฆเต‹เดทเด™เตเด™เตพ.

เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดค เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเต‡ เดธเตผเดตเต‡เดฏเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเต‚. เดธเตˆเตป เด‡เตปเดฆเดฏเดตเดพเดฏเดฟ.

เดžเดพเตป เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เดนเดฌเตเดฐเต†เดฏเดฟเตฝ เด‡เดฒเตเดฒ, เด•เต‚เดŸเดพเดคเต† เดเดคเตŠเด•เตเด•เต† เดตเดฟเดทเดฏเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด™เตเด™เดณเดพเดฃเต เดจเดฟเด™เตเด™เตพ เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฃเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เด…เดฑเดฟเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต?

  • เดกเดพเดฑเตเดฑ เด˜เดŸเดจเด•เตพ

  • เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เตพ (เดกเดฟเดชเดฟ, เดฑเดฟเด•เตผเดทเตป, เดกเดพเดฑเตเดฑ เด•เด‚เดชเตเดฐเดทเตป เดฎเตเดคเดฒเดพเดฏเดต)

  • เดฏเดฅเดพเตผเดคเตเดฅ เดœเต€เดตเดฟเดคเดคเตเดคเดฟเตฝ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจเด•เดณเตเดŸเต†เดฏเตเด‚ เด…เตฝเด—เต‹เดฐเดฟเดคเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดชเตเดฐเดฏเต‹เด—เด‚

  • เดœเดพเดตเดฏเดฟเตฝ เด†เตปเดกเตเดฐเต‹เดฏเดฟเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต

  • เดœเดพเดต เดตเต†เดฌเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต

2 เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ เดตเต‹เดŸเตเดŸเต เดšเต†เดฏเตเดคเต. 1 เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดตเดฟเดŸเตเดŸเตเดจเดฟเดจเตเดจเต.

เด‰เดฑเดตเดฟเดŸเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•