API
class TreeNode<Key, Value> {
public key: Key
public value: Value
public N: number
public left: TreeNode<Key, Value>
public right: TreeNode<Key, Value>
constructor(key: Key, value: Value, N: number) {
this.key = key
this.value = value
this.N = N
this.left = null
this.right = null
}
}
class BST<Key, Value> {
private root: TreeNode<Key, Value>
constructor() {
this.root = null
}
size(): number {}
private __size(node: TreeNode<Key, Value>): number {}
get(key: Key): Value {}
private __get(node: TreeNode<Key, Value>, key: Key): Value {}
put(key: Key, val: Value): void {}
private __put(node: TreeNode<Key, Value>, key: Key, value: Value): TreeNode<Key, Value> {}
min(): Key {}
private __min(node: TreeNode<Key, Value>): TreeNode<Key, Value> {}
select(k: number): Key {}
private __select(node: TreeNode<Key, Value>, k: number): TreeNode<Key, Value> {}
deleteMin(): void {}
private __deleteMax(node: TreeNode<Key, Value>): TreeNode<Key, Value> {}
delete(): void {}
private __delete(node: TreeNode<Key, Value>, key: Key): TreeNode<Key, Value> {}
isEmpty(): boolean {}
}
实现
class TreeNode<Key, Value> {
public key: Key
public value: Value
public N: number
public left: TreeNode<Key, Value>
public right: TreeNode<Key, Value>
constructor(key: Key, value: Value, N: number) {
this.key = key
this.value = value
this.N = N
this.left = null
this.right = null
}
}
class BST<Key, Value> {
private root: TreeNode<Key, Value>
constructor() {
this.root = null
}
size(): number {
return this.__size(this.root)
}
private __size(node: TreeNode<Key, Value>): number {
if (node === null) return 0
return node.N
}
get(key: Key): Value {
return this.__get(this.root, key)
}
private __get(node: TreeNode<Key, Value>, key: Key): Value {
if (node === null) return null
if (key === node.key) return node.value
if (key > node.key) return this.__get(node.right, key)
if (key < node.key) return this.__get(node.left, key)
}
put(key: Key, val: Value): void {
this.root = this.__put(this.root, key, val)
}
private __put(node: TreeNode<Key, Value>, key: Key, value: Value): TreeNode<Key, Value> {
if (node === null) return new TreeNode<Key, Value>(key, value, 1)
if (key === node.key) node.value = value
if (key > node.key) node.right = this.__put(node.right, key, value)
if (key < node.key) node.left = this.__put(node.left, key, value)
node.N = this.__size(node.left) + this.__size(node.right) + 1
return node
}
min(): Key {
return this.__min(this.root).key
}
private __min(node: TreeNode<Key, Value>): TreeNode<Key, Value> {}
select(k: number): Key {
return this.__select(this.root, k).key
}
private __select(node: TreeNode<Key, Value>, k: number): TreeNode<Key, Value> {}
deleteMin(): void {}
private __deleteMax(node: TreeNode<Key, Value>): TreeNode<Key, Value> {}
delete(): void {}
private __delete(node: TreeNode<Key, Value>, key: Key): TreeNode<Key, Value> {}
isEmpty(): boolean {}
}
const a = [5, 3, 6, 1, 543, 24, 56, 123, 444, 325]
const bst = new BST<number, number>()
a.forEach((item, index) => bst.put(index, item))
console.log(bst.get(0), bst.get(3), bst.get(5), bst.get(1))