แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แ‹ˆแ‹ญแˆ แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹จแแˆˆแŒ‹ แ‹›แ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹˜แŒ‹แŒ…

แ‰…แ‹ตแˆ˜-แŒฅแ‰…แˆต

แ‹ญแˆ… แŒฝแˆ‘แ แˆตแˆˆ แˆแˆˆแ‰ตแ‹ฎแˆฝ แแˆˆแŒ‹ แ‹›แŽแ‰ฝ แАแ‹. แ‰ แ‰…แˆญแ‰ก แˆตแˆˆ แŠ แŠ•แ‹ต แŒฝแˆ‘แ แŒฝแŒ แАแ‰ แˆญแข แ‰ แˆƒแแˆ›แŠ• แ‹˜แ‹ด แ‹จแˆ˜แˆจแŒƒ แˆ˜แŒจแŠ“แАแ‰…แข แŠฅแ‹šแ‹ซแˆ แˆˆแˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แŽแ‰ฝ แ‰ แ‰ตแŠญแŠญแˆ แ‰ตแŠฉแˆจแ‰ต แŠ แˆแˆฐแŒ แˆแˆ, แˆแŠญแŠ•แ‹ซแ‰ฑแˆ แ‹จแˆ˜แˆแˆˆแŒŠแ‹ซ, แ‹จแˆ›แˆตแŒˆแ‰ฃแ‰ต แŠฅแŠ“ แ‹จแˆ˜แˆฐแˆจแ‹ แ‹˜แ‹ดแ‹Žแ‰ฝ แŒ แ‰ƒแˆš แŠ แˆแАแ‰ แˆฉแˆ. แŠ แˆแŠ• แˆตแˆˆ แ‹›แŽแ‰ฝ แŠ แŠ•แ‹ต แŒฝแˆ‘แ แˆˆแˆ˜แŒปแ แ‹ˆแˆฐแŠ•แŠฉ. แˆแŠ“แˆแ‰ฃแ‰ต แŠฅแŠ•แŒ€แˆแˆซแˆˆแŠ•.

แ‹›แ แ‰ แŒ แˆญแ‹ แ‹จแ‰ฐแŒˆแŠ“แŠ™ แŠ แŠ•แŒ“แ‹Žแ‰ฝแŠ• แ‹จแ‹ซแ‹˜ แ‹จแˆ˜แˆจแŒƒ แˆ˜แ‹‹แ‰…แˆญ แАแ‹แข แŠ แŠ•แ‹ต แ‹›แ แ‹จแŒแˆซแ แˆแ‹ฉ แŒ‰แ‹ณแ‹ญ แАแ‹ แˆ›แˆˆแ‰ต แŠฅแŠ•แ‰ฝแˆ‹แˆˆแŠ•. แŠ แŠ•แ‹ต แˆแˆณแˆŒ แ‹›แ แŠฅแАแˆ†:

แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แ‹ˆแ‹ญแˆ แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹จแแˆˆแŒ‹ แ‹›แ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹˜แŒ‹แŒ…

แ‹ญแˆ… แˆแˆˆแ‰ตแ‹ฎแˆฝ แแˆˆแŒ‹ แ‹›แ แŠ แ‹ญแ‹ฐแˆˆแˆ! แˆแˆ‰แˆ แАแŒˆแˆญ แŠจแ‰แŒฅแŒฅแˆญ แ‰ แ‰ณแ‰ฝ แАแ‹!

แ‰ƒแˆ‹แ‰ต แ‰ตแˆญแŒ“แˆœ

แˆตแˆญแ‹ˆ

แ‹จแ‹›แ แˆฅแˆญ แŠจแแ‰ฐแŠ›แ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แАแ‹. แ‰ แˆแˆณแˆŒแ‹ แ‹แˆตแŒฅ แ‹ญแˆ… แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต A แАแ‹ แ‰ แ‹›แ‰ แ‹แˆตแŒฅ แŠ แŠ•แ‹ต แˆ˜แŠ•แŒˆแ‹ต แ‰ฅแ‰ป แŠจแˆฅแˆฉ แ‹ˆแ‹ฐ แˆŒแˆ‹ แˆ›แŠ•แŠ›แ‹แˆ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แˆŠแˆ˜แˆซ แ‹ญแ‰ฝแˆ‹แˆ! แŠฅแŠ•แ‹ฐ แŠฅแ‹แАแ‰ฑ แŠจแˆ†แА, แˆ›แŠ•แŠ›แ‹แˆ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แŠจแ‹šแˆ… แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แŒ‹แˆญ แ‹จแˆšแ‹›แˆ˜แ‹ฐแ‹ แ‹จแŠ•แ‹‘แˆต แ‹›แ แˆฅแˆญ แ‰ฐแ‹ฐแˆญแŒŽ แˆŠแ‹ˆแˆฐแ‹ต แ‹ญแ‰ฝแˆ‹แˆ.

แ‹ˆแˆ‹แŒ†แ‰ฝ / แ‹˜แˆฎแ‰ฝ

แŠจแˆฅแˆฉ แ‰ แˆตแ‰ฐแ‰€แˆญ แˆแˆ‰แˆ แŠ แŠ•แŒ“แ‹Žแ‰ฝ แ‰ แ‰ตแŠญแŠญแˆ แŠ แŠ•แ‹ต แŒ แˆญแ‹ แ‹ˆแ‹ฐ แˆŒแˆ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹จแˆšแ‹ˆแˆตแ‹ต แАแ‹แข แŠ แˆแŠ• แŠซแˆˆแ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‰ แˆ‹แ‹ญ แ‹ซแˆˆแ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹ญแ‰ฃแˆ‹แˆ แ‹ˆแˆ‹แŒ… แ‹ญแˆ… แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต. แŠจแŠ แˆแŠ‘ แ‰ แ‰ณแ‰ฝ แ‹จแˆšแŒˆแŠ แŠฅแŠ“ แŠจแŠฅแˆฑ แŒ‹แˆญ แ‹จแ‰ฐแŒˆแŠ“แŠ˜ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹ญแ‰ฃแˆ‹แˆ แ‹˜แˆญ แ‹ญแˆ… แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต. แŠ แŠ•แ‹ต แˆแˆณแˆŒ แŠฅแŠ•แ‹แˆฐแ‹ตแข แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต B แ‹ญแ‹แˆฐแ‹ฑแฃ แŠจแ‹šแ‹ซ แ‹ˆแˆ‹แŒ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต A แ‹ญแˆ†แŠ“แˆแฃ แŠฅแŠ“ แˆแŒ†แ‰น แŠ แŠ•แŒ“แ‹Žแ‰ฝ Dแฃ E แŠฅแŠ“ F แ‹ญแˆ†แŠ“แˆ‰แข

แˆ‰แˆ…

แˆแŒ†แ‰ฝ แ‹จแˆŒแˆ‰แ‰ต แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹จแ‹›แ‰ แ‰…แŒ แˆ แ‹ญแ‰ฃแˆ‹แˆ. แ‰ แˆแˆณแˆŒแ‹ แ‹แˆตแŒฅ แŠ แŠ•แŒ“แ‹Žแ‰ฝ D, E, F, G, I, J, K แ‰…แŒ แˆŽแ‰ฝ แ‹ญแˆ†แŠ“แˆ‰.

แ‹ญแˆ… แˆ˜แˆฐแˆจแ‰ณแ‹Š แ‹จแ‰ƒแˆ‹แ‰ต แŠ แАแŒ‹แŒˆแˆญ แАแ‹แข แˆŒแˆŽแ‰ฝ แŒฝแŠ•แˆฐ-แˆแˆณแ‰ฆแ‰ฝ แ‰ แŠ‹แˆ‹ แˆ‹แ‹ญ แ‹ญแ‰ฅแˆซแˆซแˆ‰. แˆตแˆˆแ‹šแˆ…, แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แŠจแˆแˆˆแ‰ต แ‰ แˆ‹แ‹ญ แˆแŒ†แ‰ฝ แ‹จแˆ›แ‹ญแŠ–แˆจแ‹แ‰ แ‰ต แ‹›แ แАแ‹. แŠฅแŠ•แ‹ฐแŒˆแˆ˜แ‰ฑแ‰ต, แŠจแˆแˆณแˆŒแ‹ แ‹แˆตแŒฅ แ‹ซแˆˆแ‹ แ‹›แ แˆแˆˆแ‰ตแ‹ฎแˆฝ แŠ แ‹ญแˆ†แŠ•แˆ, แˆแŠญแŠ•แ‹ซแ‰ฑแˆ แŠ แŠ•แŒ“แ‹Žแ‰ฝ B แŠฅแŠ“ H แŠจแˆแˆˆแ‰ต แ‰ แˆ‹แ‹ญ แˆแŒ†แ‰ฝ แŠ แˆแ‰ธแ‹. แ‹จแˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แˆแˆณแˆŒ แ‹ญแŠธแ‹แŠ“แก-

แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แ‹ˆแ‹ญแˆ แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹จแแˆˆแŒ‹ แ‹›แ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹˜แŒ‹แŒ…

แ‹จแ‹›แ‰ แŠ แŠ•แŒ“แ‹Žแ‰ฝ แˆ›แŠ•แŠ›แ‹แŠ•แˆ แˆ˜แˆจแŒƒ แˆŠแ‹ญแ‹ แ‹ญแ‰ฝแˆ‹แˆ. แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹จแแˆˆแŒ‹ แ‹›แ แ‹จแˆšแŠจแ‰ฐแˆ‰แ‰ตแŠ• แ‰ฃแˆ…แˆชแ‹ซแ‰ต แ‹ซแˆˆแ‹ แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แАแ‹.

  1. แˆแˆˆแ‰ฑแˆ แŒแˆซ แŠฅแŠ“ แ‰€แŠ แ‹จแ‰ณแ‰ฝ แ‹›แŽแ‰ฝ แˆแˆˆแ‰ตแ‹ฎแˆฝ แแˆˆแŒ‹ แ‹›แŽแ‰ฝ แŠ“แ‰ธแ‹แข
  2. แˆแˆ‰แˆ แ‹จแ‹˜แˆแ‰€แ‹ฐ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต X แ‹จแŒแˆซ แŠ•แ‹‘แˆต แŠ–แ‹ถแ‰ฝ แ‹จแ‹แˆ‚แ‰ฅ แ‰แˆแ แŠฅแˆดแ‰ถแ‰ฝ แŠจแˆซแˆฑ แˆ˜แˆตแ‰€แˆˆแŠ› X แ‹จแ‹แˆ‚แ‰ฅ แ‰แˆแ แŠฅแˆดแ‰ต แ‹ซแАแˆฑ แŠ“แ‰ธแ‹แข
  3. แˆแˆ‰แˆ แ‹จแ‹˜แˆแ‰€แ‹ฐ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต X แ‹จแ‰€แŠ แŠ•แ‹‘แˆต แŠ แŠ•แŒ“แ‹Žแ‰ฝ แŠจแˆซแˆฑ แ‹จแˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต X แ‹จแ‹แˆ‚แ‰ฅ แ‰แˆแ แŠฅแˆดแ‰ต แ‹จแ‰ แˆˆแŒ  แ‹ˆแ‹ญแˆ แŠฅแŠฉแˆ แ‹จแˆ†แА แ‹จแ‹แˆ‚แ‰ฅ แ‰แˆแ แŠฅแˆดแ‰ถแ‰ฝ แŠ แˆแ‰ธแ‹แข

แ‰แˆแ - แ‹จแˆ˜แˆตแ‰€แˆˆแŠ› แŠญแแˆ แŠ แŠ•แ‹ณแŠ•แ‹ต แ‰ฃแˆ…แˆชแ‹Žแ‰ฝ (แˆˆแˆแˆณแˆŒ แฃ แ‰แŒฅแˆญ)แข แ‹ญแˆ… แ‰แˆแ แ‹จแˆšแ‹›แˆ˜แ‹ฐแ‹แŠ• แ‹จแ‹›แ‰แŠ• แŠ แŠซแˆ แˆˆแˆ›แŒแŠ˜แ‰ต แ‰แˆแ‰ แ‹ซแˆตแˆแˆแŒ‹แˆแข แ‹จแˆแˆˆแ‰ตแ‹ฎแˆฝ แแˆˆแŒ‹ แ‹›แ แˆแˆณแˆŒ:

แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แ‹ˆแ‹ญแˆ แˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹จแแˆˆแŒ‹ แ‹›แ แŠฅแŠ•แ‹ดแ‰ต แŠฅแŠ•แ‹ฐแˆšแ‹˜แŒ‹แŒ…

แ‹จแ‹›แ แŠฅแ‹ญแ‰ณ

แŠฅแ‹จแˆ„แ‹ตแŠฉ แˆตแˆ„แ‹ต แŒแŠ•แ‹›แ‰คแˆ…แŠ• แˆˆแˆ›แˆปแˆปแˆ แŠ แŠ•แ‹ณแŠ•แ‹ต (แˆแŠ“แˆแ‰ฃแ‰ต แ‹ซแˆแ‰ฐแˆŸแˆ‰) แ‹จแŠฎแ‹ต แ‰แˆซแŒฎแ‰ฝแŠ• แŠ แŠซแ‰ตแ‰ปแˆˆแˆแข แˆ™แˆ‰แ‹ แŠฎแ‹ต แ‰ แŠ แŠ•แ‰€แŒน แˆ˜แŒจแˆจแˆป แˆ‹แ‹ญ แ‹ญแˆ†แŠ“แˆแข

แ‹›แ‰ แ‰ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹จแ‰ฐแˆ แˆซ แАแ‹. แ‹จแˆ˜แˆตแ‰€แˆˆแŠ› แŠญแแˆ แˆ˜แ‹‹แ‰…แˆญ;

public class Node<T> {
    private T data;
    private int key;
    private Node<T> leftChild;
    private Node<T> rightChild;

    public Node(T data, int key) {
        this.data = data;
        this.key = key;
    }
    public Node<T> getLeftChild() {
        return leftChild;
    }

    public Node<T> getRightChild() {
        return rightChild;
    }
//...ะพัั‚ะฐะปัŒะฝั‹ะต ะผะตั‚ะพะดั‹ ัƒะทะปะฐ
}

แŠฅแ‹ซแŠ•แ‹ณแŠ•แ‹ฑ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แˆแˆˆแ‰ต แˆแŒ†แ‰ฝ แŠ แˆ‰แ‰ต (แ‹จแŒแˆซ แˆแŒ… แŠฅแŠ“/แ‹ˆแ‹ญแˆ แ‹จแ‰€แŠ แˆแŒ… แˆแŒ†แ‰ฝ แ‰ฃแ‹ถ แˆŠแˆ†แŠ‘ แ‹ญแ‰ฝแˆ‹แˆ‰)แข แˆแŠ“แˆแ‰ฃแ‰ต แ‰ แ‹šแˆ… แˆแŠ”แ‰ณ แ‹แˆตแŒฅ แ‹จแ‰แŒฅแˆญ แ‹แˆ‚แ‰ฅ แ‰ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‹แˆตแŒฅ แ‹จแ‰ฐแŠจแˆ›แ‰ธ แ‹แˆ‚แ‰ฅ แˆ˜แˆ†แŠ‘แŠ• แ‰ฐแˆจแ‹ตแ‰ฐแˆ… แ‹ญแˆ†แŠ“แˆ; แ‰แˆแ - แ‹จแˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‰แˆแ.

แ‰‹แŒ แˆฎแ‹แŠ• แŠ แ‹แ‰€แŠ“แˆ, แŠ แˆแŠ• แˆตแˆˆ แ‹›แŽแ‰ฝ แŠ แˆตแ‰ธแŠณแ‹ญ แ‰ฝแŒแˆฎแ‰ฝ แŠฅแŠ•แАแŒ‹แŒˆแˆญ. แŠฅแ‹šแˆ… แŠฅแŠ“ แŠจแ‰ณแ‰ฝ, "แ‹›แ" แ‹จแˆšแˆˆแ‹ แ‰ƒแˆ แ‹จแˆแˆˆแ‰ตแ‹ฎแˆฝ แแˆˆแŒ‹ แ‹›แ แŒฝแŠ•แˆฐ-แˆแˆณแ‰ฅ แˆ›แˆˆแ‰ต แАแ‹. แ‹จแˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แ แŠ แ‹ˆแ‰ƒแ‰€แˆญ;

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

แ‰ แ‹šแˆ… แˆแŠ”แ‰ณ, แŠ แˆแŠ• แŠซแˆˆแ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แ‰ แ‰ฐแŒจแˆ›แˆช, แˆตแˆˆ แ‹จแŠ แˆแŠ‘ แˆ˜แˆตแ‰€แˆˆแŠ› แ‹ˆแˆ‹แŒ… แˆ˜แˆจแŒƒ แˆ›แŠจแˆ›แ‰ธแ‰ต แŠ แˆตแˆแˆ‹แŒŠ แАแ‹. แ‹จแŠ แˆแŠ‘ แŒŠแ‹œ แ‰ฃแ‹ถ แ‰ แˆšแˆ†แŠ•แ‰ แ‰ต แŒŠแ‹œแฃ แ‹จแ‹ˆแˆ‹แŒ… แ‰ฐแˆˆแ‹‹แ‹‹แŒญ แ‹จแˆแŠ•แˆแˆแŒˆแ‹แŠ• แˆ‰แˆ… แ‹ญแ‹ญแ‹›แˆแข
แ‹จแˆ›แˆตแŒˆแ‰ขแ‹ซ แ‰…แˆแŒฅแแŠ“ แŠจแแˆˆแŒ‹แ‹ แŒ‹แˆญ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹ญแˆ†แŠ“แˆ - O(log(n))แข

แˆฐแˆญแ‹

แˆ˜แˆฐแˆจแ‹ แ‰ แ‹›แ แˆ˜แŠจแŠ“แ‹ˆแŠ• แ‹ซแˆˆแ‰ แ‰ต แ‰ แŒฃแˆ แ‹แˆตแ‰ฅแˆตแ‰ฅ แ‰€แ‹ถ แŒฅแŒˆแŠ“ แАแ‹. แ‰ แˆ˜แŒ€แˆ˜แˆชแ‹ซ แŠฅแŠ› แ‹จแˆแŠ“แˆตแ‹ˆแŒแ‹ตแ‰ แ‰ตแŠ• แŠคแˆˆแˆ˜แŠ•แ‰ต แˆ˜แˆแˆˆแŒ แŠ แˆตแˆแˆ‹แŒŠ แŠฅแŠ•แ‹ฐแˆšแˆ†แŠ• แŒแˆแŒฝ แАแ‹. แŒแŠ• แŠจแ‹šแ‹ซ แˆแŠ•? แˆ›แŒฃแ‰€แˆปแ‹แŠ• แ‹ˆแ‹ฐ แ‰ฃแ‹ถแАแ‰ต แ‰ฅแ‰ป แŠซแˆตแ‰€แˆ˜แŒฅแАแ‹ แ‹ญแˆ… แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แˆตแˆˆแˆ†แАแ‹ แŠ•แ‹‘แˆต แ‹›แ แˆ˜แˆจแŒƒ แŠฅแŠ“แŒฃแˆˆแŠ•แข แ‹จแ‹›แ แˆ›แˆตแ‹ˆแŒˆแŒƒ แ‹˜แ‹ดแ‹Žแ‰ฝ แ‰ แˆฆแˆตแ‰ต แˆแŠ”แ‰ณแ‹Žแ‰ฝ แ‹ญแŠจแˆแˆ‹แˆ‰.

แ‹จแˆ˜แŒ€แˆ˜แˆชแ‹ซ แŒ‰แ‹ณแ‹ญแข แ‹จแˆšแ‹ˆแŒˆแ‹ฐแ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แˆแŒ†แ‰ฝ แ‹จแˆ‰แ‰ตแˆแข

แ‹จแˆšแˆฐแˆจแ‹˜แ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แˆแŒ†แ‰ฝ แŠจแˆŒแˆ‰แ‰ต, แ‹ญแˆ… แˆ›แˆˆแ‰ต แ‰…แŒ แˆ แАแ‹ แˆ›แˆˆแ‰ต แАแ‹. แˆตแˆˆแ‹šแˆ…แฃ แ‹จแ‹ˆแˆ‹แŒแŠ• แ‹จแŒแˆซ แˆแŒ… แ‹ˆแ‹ญแˆ แ‹จแ‰€แŠ แˆแŒ… แˆ˜แˆตแŠฎแ‰ฝแŠ• แ‰ แ‰€แˆ‹แˆ‰ แ‰ฃแ‹ถ แˆ›แ‹ตแˆจแŒ แ‹ญแ‰ฝแˆ‹แˆ‰แข

แˆแˆˆแ‰ฐแŠ› แŒ‰แ‹ณแ‹ญแข แ‹จแˆšแ‹ˆแŒˆแ‹ฐแ‹ แˆ˜แˆตแ‰€แˆˆแŠ› แˆ˜แŠ•แŒˆแ‹ต แŠ แŠ•แ‹ต แˆแŒ… แŠ แˆˆแ‹

แ‹ญแˆ… แŒ‰แ‹ณแ‹ญแˆ แ‰ แŒฃแˆ แŠ แˆตแ‰ธแŒ‹แˆช แŠ แ‹ญแ‹ฐแˆˆแˆ. แ‹ˆแ‹ฐ แˆแˆณแˆŒแŠ แ‰ฝแŠ• แŠฅแŠ•แˆ˜แˆˆแˆตแข แŠ แŠ•แ‹ต แŠคแˆˆแˆ˜แŠ•แ‰ต แŠจแ‰แˆแ 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;
    }

แ‹แˆตแ‰ฅแˆตแ‰ฅแАแ‰ต - แŠฆ (แˆŽแŒ(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

แ‹ˆแ‹ฐ แŠฆ(n) แˆ˜แ‰ แˆ‹แˆธแ‰ต

แ‰ฅแ‹™แ‹Žแ‰ปแ‰ฝแˆ แŠ แˆตแ‰ฐแ‹แˆ‹แ‰ฝแˆ แ‹ญแˆ†แŠ“แˆแก แ‹›แ‰ แˆšแ‹›แŠ“แ‹Š แŠฅแŠ•แ‹ณแ‹ญแˆ†แŠ• แ‰ฅแ‰ณแ‹ฐแˆญแŒ‰แ‰ตแˆต? แˆˆแˆแˆณแˆŒ แ‰ แ‹›แ‰ แ‹แˆตแŒฅ แ‹จแˆšแŒจแˆแˆฉ แ‰แˆแŽแ‰ฝแŠ• แ‹ซแŠ‘แˆฉ: 1,2,3,4,5,6... แŠจแ‹› แ‹›แ‰ แ‰ แ‰ฐแ‹ˆแˆฐแА แˆ˜แˆแŠฉ แ‹จแ‰ฐแ‹ซแ‹ซแ‹˜ แ‹แˆญแ‹แˆญแŠ• แ‹ซแˆตแ‰ณแ‹แˆณแˆ. แŠฅแŠ“ แŠ แ‹Ž, แ‹›แ‰ แ‹จแ‹›แ‰แŠ• แˆ˜แ‹‹แ‰…แˆญ แ‹ซแŒฃแˆ, แŠฅแŠ“ แˆตแˆˆแ‹šแˆ… แ‹จแ‹แˆ‚แ‰ฅ แ‰ฐแ‹ฐแˆซแˆฝแАแ‰ต แ‹แŒคแ‰ณแˆ›แАแ‰ต. แ‹จแแˆˆแŒ‹แฃ แ‹จแˆ›แˆตแŒˆแ‰ขแ‹ซ แŠฅแŠ“ แ‹จแˆตแˆจแ‹› แˆตแˆซแ‹Žแ‰ฝ แ‹แˆตแ‰ฅแˆตแ‰ฅแАแ‰ต แŠจแ‰ฐแŒˆแŠ“แŠ˜แ‹ แ‹แˆญแ‹แˆญแก แŠฆ(n) แŒ‹แˆญ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹ญแˆ†แŠ“แˆแข แ‹ญแˆ… แ‰ แŒฃแˆ แŠ แˆตแˆแˆ‹แŒŠ แŠจแˆ†แŠ‘แ‰ต แŠ แŠ•แ‹ฑ แАแ‹, แ‰ แŠฅแŠ” แŠ แˆตแ‰ฐแ‹ซแ‹จแ‰ต, แ‹จแˆแˆˆแ‰ตแ‹ฎแˆฝ แ‹›แŽแ‰ฝ แŒ‰แ‹ณแ‰ถแ‰ฝ.

แ‰ แ‹ณแˆฐแˆณ แŒฅแŠ“แ‰ฑ แ‹แˆตแŒฅ แ‹จแ‰ฐแˆ˜แ‹˜แŒˆแ‰ก แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ แ‰ฅแ‰ป แˆ˜แˆณแ‰ฐแ แ‹ญแ‰ฝแˆ‹แˆ‰แข แˆตแŒแŠ• แŠฅแŠ•แŠฅแ‰ฃแŠญแˆ…แŠ•แข

แ‰ แˆแ‰ แˆฌ แˆ‹แ‹ญ แˆˆแˆจแŒ…แˆ แŒŠแ‹œ แŠ แˆแ‰†แ‹ญแˆ แฃ แŠฅแŠ“ แ‰ แ‹จแ‰ตแŠžแ‰น แˆญแ‹•แˆถแ‰ฝ แˆ‹แ‹ญ แ‹จแ‰ตแŠžแ‰นแŠ• แˆ˜แŒฃแŒฅแŽแ‰ฝ แ‹จแ‰ แˆˆแŒ  แˆ›แ‹จแ‰ต แ‹ญแˆแˆแŒ‹แˆ‰?

  • แ‹จแ‹แˆ‚แ‰ฅ แˆ˜แ‹‹แ‰…แˆฎแ‰ฝ

  • แŠ แˆแŒŽแˆชแ‹แˆ (DPแฃ แ‰ฐแ‹ฐแŒ‹แŒ‹แˆšแАแ‰ตแฃ แ‹จแ‹แˆ‚แ‰ฅ แˆ˜แŒญแˆ˜แ‰…แฃ แ‹ˆแ‹˜แ‰ฐ)

  • แ‰ แŠฅแ‹แАแ‰ฐแŠ› แˆ…แ‹ญแ‹ˆแ‰ต แ‹แˆตแŒฅ แ‹จแ‹แˆ‚แ‰ฅ แŠ แ‹ˆแ‰ƒแ‰€แˆฎแ‰ฝ แŠฅแŠ“ แˆตแˆแ‰ฐ แ‰€แˆ˜แˆฎแ‰ฝ แŠ แ‰ฐแŒˆแ‰ฃแ‰ แˆญ

  • แŠ แŠ•แ‹ตแˆฎแ‹ญแ‹ต แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซแ‹Žแ‰ฝแŠ• แ‰ แŒƒแ‰ซ แˆ›แˆฐแŠ“แ‹ณแ‰ต

  • แŒƒแ‰ซ แ‹จแ‹ตแˆญ แˆ˜แ‰ฐแŒแ‰ แˆชแ‹ซ แ•แˆฎแŒแˆซแˆšแŠ•แŒ

2 แ‰ฐแŒ แ‰ƒแˆšแ‹Žแ‰ฝ แ‹ตแˆแŒฝ แˆฐแŒฅแ‰ฐแ‹‹แˆแข 1 แ‰ฐแŒ แ‰ƒแˆš แ‰ฐแ‰†แŒฅแ‰งแˆแข

แˆแŠ•แŒญแก www.habr.com

แ‰ DDoS แŒฅแ‰ แ‰ƒแฃ VPS VDS แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แˆˆแŒฃแ‰ขแ‹ซแ‹Žแ‰ฝ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‹ญแŒแ‹™ ๐Ÿ”ฅ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แ‹จแ‹ตแˆญ แŒฃแ‰ขแ‹ซ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‰ แ‹ฒแ‹ถแŠคแˆต แŒฅแ‰ แ‰ƒแฃ แ‰ แ‰ชแ’แŠคแˆต แ‰ชแ‹ฒแŠคแˆต แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แ‹ญแŒแ‹™ | ProHoster