ts-ds-tool
Version:
Data structure and algorithm of TypeScript
50 lines (44 loc) • 1.29 kB
text/typescript
import { AbstractSet } from "../interface/AbstractSet";
import { BasicBinaryTree } from "../tree/basic-binary-tree/BasicBinaryTree";
import { RedBlackTree } from "../tree/red-black-tree/RedBlackTree";
export class TreeSet<T> extends AbstractSet<T>{
private tree: RedBlackTree<T>;
private size = 0;
constructor(compareKey?: keyof T){
super();
this.tree = new RedBlackTree<T>(compareKey);
}
add(item: T): this {
if (this.tree.contains(item)){
return this;
}
this.tree.insert(item);
this.size++;
return this;
}
entries(): Array<T> {
return BasicBinaryTree.inTraversal(this.tree.Root);
}
has(item: T): boolean {
return this.tree.contains(item);
}
remove(item: T): boolean {
if (!this.tree.contains(item)){
return false;
}
this.size--;
return this.tree.remove(item);
}
diff(set: AbstractSet<T>): Array<T>{ // A-B 差集
return super.diff(set);
}
union(set: AbstractSet<T>): Array<T>{ // 并集
return super.union(set);
}
intersect(set: AbstractSet<T>): Array<T>{ // 交集
return super.intersect(set);
}
get Size(){
return this.size;
}
}