mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2025-12-08 19:06:00 +00:00
99 lines
2.4 KiB
JavaScript
99 lines
2.4 KiB
JavaScript
import BinarySearchTree from '../BinarySearchTree';
|
|
|
|
describe('BinarySearchTree', () => {
|
|
it('should create binary search tree', () => {
|
|
const bst = new BinarySearchTree();
|
|
|
|
expect(bst).toBeDefined();
|
|
expect(bst.root).toBeDefined();
|
|
expect(bst.root.value).toBeNull();
|
|
expect(bst.root.left).toBeNull();
|
|
expect(bst.root.right).toBeNull();
|
|
});
|
|
|
|
it('should insert values', () => {
|
|
const bst = new BinarySearchTree();
|
|
|
|
const insertedNode1 = bst.insert(10);
|
|
const insertedNode2 = bst.insert(20);
|
|
bst.insert(5);
|
|
|
|
expect(bst.toString()).toBe('5,10,20');
|
|
expect(insertedNode1.value).toBe(10);
|
|
expect(insertedNode2.value).toBe(20);
|
|
});
|
|
|
|
it('should check if value exists', () => {
|
|
const bst = new BinarySearchTree();
|
|
|
|
bst.insert(10);
|
|
bst.insert(20);
|
|
bst.insert(5);
|
|
|
|
expect(bst.contains(20)).toBe(true);
|
|
expect(bst.contains(40)).toBe(false);
|
|
});
|
|
|
|
it('should remove nodes', () => {
|
|
const bst = new BinarySearchTree();
|
|
|
|
bst.insert(10);
|
|
bst.insert(20);
|
|
bst.insert(5);
|
|
|
|
expect(bst.toString()).toBe('5,10,20');
|
|
|
|
const removed1 = bst.remove(5);
|
|
expect(bst.toString()).toBe('10,20');
|
|
expect(removed1).toBe(true);
|
|
|
|
const removed2 = bst.remove(20);
|
|
expect(bst.toString()).toBe('10');
|
|
expect(removed2).toBe(true);
|
|
});
|
|
|
|
it('should insert object values', () => {
|
|
const nodeValueCompareFunction = (a, b) => {
|
|
const normalizedA = a || { value: null };
|
|
const normalizedB = b || { value: null };
|
|
|
|
if (normalizedA.value === normalizedB.value) {
|
|
return 0;
|
|
}
|
|
|
|
return normalizedA.value < normalizedB.value ? -1 : 1;
|
|
};
|
|
|
|
const obj1 = { key: 'obj1', value: 1, toString: () => 'obj1' };
|
|
const obj2 = { key: 'obj2', value: 2, toString: () => 'obj2' };
|
|
const obj3 = { key: 'obj3', value: 3, toString: () => 'obj3' };
|
|
|
|
const bst = new BinarySearchTree(nodeValueCompareFunction);
|
|
|
|
bst.insert(obj2);
|
|
bst.insert(obj3);
|
|
bst.insert(obj1);
|
|
|
|
expect(bst.toString()).toBe('obj1,obj2,obj3');
|
|
});
|
|
|
|
it('should be traversed to sorted array', () => {
|
|
const bst = new BinarySearchTree();
|
|
|
|
bst.insert(10);
|
|
bst.insert(-10);
|
|
bst.insert(20);
|
|
bst.insert(-20);
|
|
bst.insert(25);
|
|
bst.insert(6);
|
|
|
|
expect(bst.toString()).toBe('-20,-10,6,10,20,25');
|
|
expect(bst.root.height).toBe(2);
|
|
|
|
bst.insert(4);
|
|
|
|
expect(bst.toString()).toBe('-20,-10,4,6,10,20,25');
|
|
expect(bst.root.height).toBe(3);
|
|
});
|
|
});
|