แ แตแ-แฅแ แต
แญแ แฝแแ แตแ แแแตแฎแฝ แแแ แแแฝ แแ. แ แ แญแก แตแ แ แแต แฝแแ แฝแ แแ แญแข แฅแแซแ แแแแตแฎแฝ แแแฝ แ แตแญแญแ แตแฉแจแต แ แแฐแ แแ, แแญแแซแฑแ แจแแแแแซ, แจแแตแแฃแต แฅแ แจแแฐแจแ แแดแแฝ แ แแ แ แแแ แฉแ. แ แแ แตแ แแแฝ แ แแต แฝแแ แแแปแ แแฐแแฉ. แแแแฃแต แฅแแแแซแแ.
แแ แ แ แญแ แจแฐแแแ แ แแแแฝแ แจแซแ แจแแจแ แแแ แญ แแแข แ แแต แแ แจแแซแ แแฉ แแณแญ แแ แแแต แฅแแฝแแแ. แ แแต แแณแ แแ แฅแแ:

แญแ
แแแตแฎแฝ แแแ แแ แ แญแฐแแ! แแแ แแแญ แจแแฅแฅแญ แ แณแฝ แแ!
แแแต แตแญแแ
แตแญแ
แจแแ แฅแญ แจแแฐแแ แแตแแแ แแแแต แแ. แ แแณแแ แแตแฅ แญแ แแตแแแ แแแแต A แแ แ แแ แแตแฅ แ แแต แแแแต แฅแป แจแฅแฉ แแฐ แแ แแแแแ แแตแแแ แแแแต แแแซ แญแฝแแ! แฅแแฐ แฅแแแฑ แจแแ, แแแแแ แแตแแแ แแแแต แจแแ แแตแแแ แแแแต แแญ แจแแแแฐแ แจแแแต แแ แฅแญ แฐแฐแญแ แแแฐแต แญแฝแแ.
แแแแฝ / แแฎแฝ
แจแฅแฉ แ แตแฐแแญ แแแ แ แแแแฝ แ แตแญแญแ แ แแต แ แญแ แแฐ แแ แแตแแแ แแแแต แจแแแตแต แแแข แ แแ แซแแ แแตแแแ แแแแต แ แแญ แซแแ แแตแแแ แแแแต แญแฃแแ แแแ แญแ แแตแแแ แแแแต. แจแ แแ แ แณแฝ แจแแแ แฅแ แจแฅแฑ แแญ แจแฐแแแ แแตแแแ แแแแต แญแฃแแ แแญ แญแ แแตแแแ แแแแต. แ แแต แแณแ แฅแแแฐแตแข แแตแแแ แแแแต B แญแแฐแฑแฃ แจแแซ แแแ แแตแแแ แแแแต A แญแแแแฃ แฅแ แแแน แ แแแแฝ Dแฃ E แฅแ F แญแแแแข
แแ
แแแฝ แจแแแต แแตแแแ แแแแต แจแแ แ แ แ แญแฃแแ. แ แแณแแ แแตแฅ แ แแแแฝ 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 () แฅแ 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))
แฒแแตแชแญ แแแแซ
แแปแแชแซ แแแต แ แแต แแแญ แแแตแจแ แแฐ แฅแซแแณแแฑ แจแแ แแตแแแ แแแแต แแแฅแแต แแ.
แฐแฐแแแ แฒแแตแชแญ แแปแแชแซ แตแแฐ แแแญแก
- แ แแซ แแ แแญ แฅแญแแ แญแแฐแฑ
- แจแซแตแ แแญ แฅแญแแ แแฐแต
- แ แตแญแญแแแ แแ แแญ แฅแญแแ แญแแฐแฑ
แฎแต:
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
