เดซเตเตผโเดชเตเดฒเต
เด เดฒเตเดเดจเด เดฌเตเดจเดฑเดฟ เดธเตเตผเดเตเดเต เดเตเดฐเตเดเดณเต เดเตเดฑเดฟเดเตเดเตเดณเตเดณเดคเดพเดฃเต. เดเดพเตป เด
เดเตเดคเตเดคเดฟเดเต เดเดฐเต เดฒเตเดเดจเด เดเดดเตเดคเดฟ
เด เดฐเดฟเดเตเดเดณเดพเตฝ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเด เดจเตเดกเตเดเตพ เด เดเดเตเดเตเดจเตเดจ เดเดฐเต เดกเดพเดฑเตเดฑเดพ เดเดเดจเดฏเดพเดฃเต เดเตเดฐเต. เดเดฐเต เดเตเดฐเดพเดซเดฟเดจเตเดฑเต เดเดฐเต เดชเตเดฐเดคเตเดฏเตเด เดเตเดธเดพเดฃเต เดเดฐเต เดฎเดฐเด เดเดจเตเดจเต เดจเดฎเตเดเตเดเต เดชเดฑเดฏเดพเด. เดเดฐเต เดตเตเดเตเดทเดคเตเดคเดฟเดจเตเดฑเต เดเดฆเดพเดนเดฐเดฃเด เดเดคเดพ:
เดเดคเตเดฐเต เดฌเตเดจเดฑเดฟ เดธเตเตผเดเตเดเต เดเตเดฐเต เด
เดฒเตเดฒ! เดเดฒเตเดฒเดพเด เดตเตเดเตเดเดฟเดเตเดเตเดฑเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต!
เดชเดฆเดพเดตเดฒเดฟ
เดฑเตเดเตเดเต
เดเตเดฐเต เดฑเตเดเตเดเต เดเดฑเตเดฑเดตเตเด เดเดฏเตผเดจเตเดจ เดจเตเดกเต เดเดฃเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดเดคเดพเดฃเต เดจเตเดกเต A. เดฎเดฐเดคเตเดคเดฟเตฝ, เดเดฐเต เดชเดพเดคเดฏเตเดเตเดเต เดฎเดพเดคเตเดฐเดฎเต เดฑเตเดเตเดเดฟเตฝ เดจเดฟเดจเตเดจเต เดฎเดฑเตเดฑเตเดคเตเดเตเดเดฟเดฒเตเด เดจเตเดกเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเต! เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดเดคเต เดจเตเดกเตเด เด เดจเตเดกเดฟเดจเต เด เดจเตเดฏเตเดเตเดฏเดฎเดพเดฏ เดธเดฌเตเดเตเดฐเตเดฏเตเดเต เดฑเตเดเตเดเดพเดฏเดฟ เดเดฃเดเตเดเดพเดเตเดเดพเด.
เดฎเดพเดคเดพเดชเดฟเดคเดพเดเตเดเตพ/เดธเดจเตเดคเดคเดฟ
เดฑเตเดเตเดเต เดเดดเดฟเดเตเดฏเตเดณเตเดณ เดเดฒเตเดฒเดพ เดจเตเดกเตเดเตพเดเตเดเตเด เดเตเดคเตเดฏเดฎเดพเดฏเดฟ เดเดฐเต เดเดกเตเดเต เดฎเดฑเตเดฑเตเดฐเต เดจเตเดกเดฟเดฒเตเดเตเดเต เดจเดฏเดฟเดเตเดเตเดจเตเดจเต. เดจเดฟเดฒเดตเดฟเดฒเต เดจเตเดกเดฟเดจเต เดฎเตเดเดณเดฟเดฒเตเดณเตเดณ เดจเตเดกเดฟเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต เดฐเดเตเดทเดฟเดคเดพเดตเต เด เดจเตเดกเต. เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณเดคเดฟเดจเต เดคเดพเดดเต เดธเตเดฅเดฟเดคเดฟ เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดจเตเดกเต, เด เดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต เดธเดจเตเดคเดคเดฟ เด เดจเตเดกเต. เดจเดฎเตเดเตเดเต เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดเดเตเดเตเดเดพเด. เดจเตเดกเต เดฌเดฟ เดเดเตเดเตเดเตเด, เด เดชเตเดชเตเตพ เด เดคเดฟเดจเตเดฑเต เดชเดพเดฐเดจเตเดฑเต เดจเตเดกเต เด เดเดฏเดฟเดฐเดฟเดเตเดเตเด, เด เดคเดฟเดจเตเดฑเต เดเตเดเตเดเดฟเดเตพ เดกเดฟ, เด, เดเดซเต เดเดจเตเดจเต เดจเตเดกเตเดเตพ เดเดฏเดฟเดฐเดฟเดเตเดเตเด.
เดฒเตเดซเต
เดเตเดเตเดเดฟเดเดณเดฟเดฒเตเดฒเดพเดคเตเดค เดเดฐเต เดจเตเดกเดฟเดจเต เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต เดเดฒ เดเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเดจเตเดจเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดจเตเดกเตเดเตพ D, E, F, G, I, J, K เดเดฒเดเตพ เดเดฏเดฟเดฐเดฟเดเตเดเตเด.
เดเดคเดพเดฃเต เด เดเดฟเดธเตเดฅเดพเดจ เดชเดฆเดพเดตเดฒเดฟ. เดฎเดฑเตเดฑเต เดเดถเดฏเดเตเดเตพ เดชเดฟเดจเตเดจเตเดเต เดเตผเดเตเด เดเตเดฏเตเดฏเตเด. เด เดคเดฟเดจเดพเตฝ, เดเดฐเต เดจเตเดกเดฟเดจเตเด เดฐเดฃเตเดเดฟเตฝ เดเตเดเตเดคเตฝ เดเตเดเตเดเดฟเดเดณเตเดฃเตเดเดพเดเดพเดคเตเดค เดเดฐเต เดตเตเดเตเดทเดฎเดพเดฃเต เดฌเตเดจเดฑเดฟ เดเตเดฐเต. เดจเดฟเดเตเดเตพ เดเดนเดฟเดเตเดเดคเตเดชเตเดฒเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดตเตเดเตเดทเด เดฌเตเดจเดฑเดฟ เดเดฏเดฟเดฐเดฟเดเตเดเดฟเดฒเตเดฒ, เดเดพเดฐเดฃเด เดจเตเดกเตเดเตพ B, H เดเดจเตเดจเดฟเดตเดฏเตเดเตเดเต เดฐเดฃเตเดเดฟเตฝ เดเตเดเตเดคเตฝ เดเตเดเตเดเดฟเดเดณเตเดฃเตเดเต. เดฌเตเดจเดฑเดฟ เดเตเดฐเตเดฏเตเดเต เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดเดคเดพ:
เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต เดจเตเดกเตเดเดณเดฟเตฝ เดเดคเต เดตเดฟเดตเดฐเดตเตเด เด
เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเดพเด. เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเตเดฃเดเตเดเดณเตเดณเตเดณ เดเดฐเต เดฌเตเดจเดฑเดฟ เดเตเดฐเตเดฏเดพเดฃเต เดฌเตเดจเดฑเดฟ เดธเตเตผเดเตเดเต เดเตเดฐเต:
- เดเดเดคเต, เดตเดฒเดคเต เดเดชเดตเตเดเตเดทเดเตเดเตพ เดฌเตเดจเดฑเดฟ เดธเตเตผเดเตเดเต เดเตเดฐเตเดเดณเดพเดฃเต.
- เดเดฐเต เด เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดจเตเดกเต X เดจเตเดฑเต เดเดเดคเต เดธเดฌเตเดเตเดฐเตเดฏเตเดเต เดเดฒเตเดฒเดพ เดจเตเดกเตเดเตพเดเตเดเตเด เดจเตเดกเต X-เดจเตเดฑเต เดกเดพเดฑเตเดฑ เดเต เดฎเตเดฒเตเดฏเดคเตเดคเตเดเตเดเดพเตพ เดกเดพเดฑเตเดฑ เดเต เดฎเตเดฒเตเดฏเดเตเดเตพ เดเตเดฑเดตเดพเดฃเต.
- เดเดฐเต เด เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดจเตเดกเต 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))
เดธเดฎเดฎเดฟเดคเดฟ เดฌเตเดชเดพเดธเต
เดฎเดฐเดคเตเดคเดฟเดจเตเดฑเต เดเดฐเต เดจเตเดกเดฟเดฒเตเด เดเดจเตเดคเตเดเตเดเดฟเดฒเตเด เดเตเดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดจเดเดคเตเดคเตเดจเตเดจ เดธเดจเตเดฆเตผเดถเดจเดฎเดพเดฃเต เดเตเดฐเดพเดตเตเตผเดธเตฝ.
เดเดตเตผเดคเตเดคเดจ เดธเดฎเดฎเดฟเดคเดฟ เดเตเดฐเดพเดตเตเตผเดธเตฝ เด เตฝเดเตเดฐเดฟเดคเด:
- เดเดเดคเต เดเตเดเตเดเดฟเดฏเดฟเตฝ เดเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดคเตเดคเตเด
- เดธเตเดตเดฏเด เดเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดคเตเดคเตเด
- เดถเดฐเดฟเดฏเดพเดฏ เดเตเดเตเดเดฟเดฏเดฟเตฝ เดเดฐเต เดจเดเดชเดเดฟเดฏเตเดเตเดเตเดเตเด
เดเตเดกเต:
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