class Node {
data = null
left = null
right = null
constructor(key) {
this.data = key;
}
}
class Tree {
root = null
count = null
find(data) {
let currentNode = this.root
while (currentNode) {
if (currentNode.data === data) {
return currentNode
}
if (currentNode.data > data) {
currentNode = currentNode.left
} else if (currentNode.data < data) {
currentNode = currentNode.right
}
}
return false
}
insert(data) {
this.count++;
let newNode = new Node(data);
if (this.root == null) {
this.root = newNode;
return true;
}
let current = this.root;
let parentNode = this.root;
while (current !== null) {
parentNode = current
if (current.data > newNode.data) {
current = current.left
if (current === null) {
parentNode.left = newNode
}
} else {
current = current.right
if (current === null) {
parentNode.right = newNode
}
}
}
return false;
}
delete(data) {
let current = this.root;
let parentNode = this.root;
let isLeftNode = false;
if (this.root && data === this.root.data) {
this.root = null;
}
while (current.data != data) {
parentNode = current;
if (current.data > data) {
isLeftNode = true;
current = current.left;
} else {
isLeftNode = false;
current = current.right;
}
if (current == null) {
return false;
}
}
this.count=this.count-1
if (current.left === null && current.right === null) {
if (isLeftNode) {
parentNode.left = null;
} else {
parentNode.right = null;
}
return true;
}
if (current.left == null && current.right != null) {
if (isLeftNode) {
parentNode.left = current.right;
} else {
parentNode.right = current.right;
}
return true
} else if (current.left != null && current.right == null) {
if (isLeftNode) {
parentNode.left = current.left;
} else {
parentNode.right = current.left;
}
return true
}
if (current.left != null && current.right != null) {
let rightNode = current.right;
let leftNode = current.left;
let tempParentNode = null;
let tempRightNode = current.right
while (tempRightNode != null) {
tempParentNode = tempRightNode
tempRightNode = tempRightNode.left;
}
tempParentNode.left = leftNode
if (isLeftNode) {
parentNode.left = rightNode;
} else {
parentNode.right = rightNode;
}
return true
}
return false
}
}
const tree = new Tree()
tree.insert(2)
tree.insert(1)
tree.insert(7)
tree.insert(5)
tree.insert(9)
tree.insert(4)
tree.insert(6)
tree.insert(8)
tree.insert(10)
tree.delete(5)
console.log(tree);