返回
JavaScript实现二叉搜索树
前端
2023-12-04 05:45:00
- 什么是二叉搜索树
二叉搜索树(BST)是一种二叉树,其中每个节点都包含一个值,并且该值大于其左子节点的值,而小于其右子节点的值。这意味着,我们可以通过比较节点的值来快速地搜索树中的元素。
2. 如何用JavaScript实现二叉搜索树
我们可以使用JavaScript来创建一个二叉搜索树。首先,我们需要创建一个类来表示二叉搜索树的节点。
class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}
然后,我们需要创建一个类来表示二叉搜索树。
class BinarySearchTree {
constructor() {
this.root = null;
}
insert(value) {
let newNode = new Node(value);
if (this.root === null) {
this.root = newNode;
} else {
this._insert(value, this.root);
}
}
_insert(value, node) {
if (value < node.value) {
if (node.left === null) {
node.left = new Node(value);
} else {
this._insert(value, node.left);
}
} else {
if (node.right === null) {
node.right = new Node(value);
} else {
this._insert(value, node.right);
}
}
}
search(value) {
if (this.root === null) {
return null;
} else {
return this._search(value, this.root);
}
}
_search(value, node) {
if (value === node.value) {
return node;
} else if (value < node.value) {
if (node.left === null) {
return null;
} else {
return this._search(value, node.left);
}
} else {
if (node.right === null) {
return null;
} else {
return this._search(value, node.right);
}
}
}
delete(value) {
if (this.root === null) {
return;
} else {
this._delete(value, this.root);
}
}
_delete(value, node) {
if (value < node.value) {
if (node.left === null) {
return;
} else {
this._delete(value, node.left);
}
} else if (value > node.value) {
if (node.right === null) {
return;
} else {
this._delete(value, node.right);
}
} else {
if (node.left === null && node.right === null) {
node = null;
} else if (node.left === null) {
node = node.right;
} else if (node.right === null) {
node = node.left;
} else {
let successor = this._findSuccessor(node);
node.value = successor.value;
this._delete(successor.value, node.right);
}
}
}
_findSuccessor(node) {
let current = node.right;
while (current.left !== null) {
current = current.left;
}
return current;
}
getMin() {
if (this.root === null) {
return null;
} else {
return this._getMin(this.root);
}
}
_getMin(node) {
if (node.left === null) {
return node.value;
} else {
return this._getMin(node.left);
}
}
getMax() {
if (this.root === null) {