UNPKG

data-structure-typed

Version:
233 lines (221 loc) 8.64 kB
import { AVLTree, BST, RedBlackTree, TreeMultiMap } from '../../../../src'; describe('Overall BinaryTree Test', () => { it('should perform various operations on BinaryTree', () => { const bst = new BST<number>(); bst.add(11); bst.add(3); bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false); expect(bst.size).toBe(16); // true bst.has(6); // true expect(bst.has(6)).toBe(true); // true expect(bst.getHeight(6)).toBe(2); // true expect(bst.getHeight()).toBe(5); // true expect(bst.getDepth(6)).toBe(3); // true const leftMost = bst.getLeftMost(); expect(leftMost).toBe(1); bst.delete(6); bst.getNode(6); // undefined expect(bst.getNode(6)).toBe(undefined); bst.isAVLBalanced(); // true or false expect(bst.isAVLBalanced()).toBe(true); const bfsIDs: number[] = []; bst.bfs(node => bfsIDs.push(node.key)); expect(bfsIDs[0]).toBe(11); const objBST = new BST<number, { key: number; keyA: number }>(); objBST.add([11, { key: 11, keyA: 11 }]); objBST.add([3, { key: 3, keyA: 3 }]); objBST.addMany([ [15, { key: 15, keyA: 15 }], [1, { key: 1, keyA: 1 }], [8, { key: 8, keyA: 8 }], [13, { key: 13, keyA: 13 }], [16, { key: 16, keyA: 16 }], [2, { key: 2, keyA: 2 }], [6, { key: 6, keyA: 6 }], [9, { key: 9, keyA: 9 }], [12, { key: 12, keyA: 12 }], [14, { key: 14, keyA: 14 }], [4, { key: 4, keyA: 4 }], [7, { key: 7, keyA: 7 }], [10, { key: 10, keyA: 10 }], [5, { key: 5, keyA: 5 }] ]); objBST.delete(11); const avlTree = new AVLTree(); avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]); avlTree.isAVLBalanced(); // true expect(avlTree.isAVLBalanced()).toBe(true); // true avlTree.delete(10); avlTree.isAVLBalanced(); // true expect(avlTree.isAVLBalanced()).toBe(true); // true }); it('Should clone a BST works fine', () => { const bst = new BST<number>([3, 6, 7, 1, 9], { iterationType: 'RECURSIVE', isReverse: true }); expect(bst.size).toBe(5); expect(bst.root?.key).toBe(6); expect(bst.root?.left?.key).toBe(9); expect(bst.root?.left?.right?.key).toBe(7); expect(bst.root?.right?.key).toBe(3); expect(bst.root?.right?.right?.key).toBe(1); expect(bst.getNode(9)?.right?.key).toBe(7); expect(bst.getHeight()).toBe(2); expect(bst.has(9)).toBe(true); expect(bst.has(7)).toBe(true); expect(bst.delete(7)[0].deleted?.key).toBe(7); expect(bst.has(7)).toBe(false); expect(bst.size).toBe(4); expect(bst.root?.key).toBe(6); expect(bst.root?.left?.key).toBe(9); expect(bst.root?.right?.key).toBe(3); expect(bst.root?.right?.right?.key).toBe(1); expect(bst.getNode(6)?.left?.key).toBe(9); expect(bst.getHeight()).toBe(2); expect(bst.has(9)).toBe(true); expect(bst.has(7)).toBe(false); expect(bst.bfs()).toEqual([6, 9, 3, 1]); const clonedBST = bst.clone(); expect(clonedBST.size).toBe(4); expect(clonedBST.root?.key).toBe(6); expect(clonedBST.root?.left?.key).toBe(9); expect(clonedBST.root?.right?.key).toBe(3); expect(clonedBST.root?.right?.right?.key).toBe(1); expect(clonedBST.getNode(6)?.left?.key).toBe(9); expect(clonedBST.getHeight()).toBe(2); expect(clonedBST.has(9)).toBe(true); expect(clonedBST.has(7)).toBe(false); expect(clonedBST.bfs()).toEqual([6, 9, 3, 1]); }); it('Should clone a AVLTree works fine', () => { const avl = new AVLTree<number>([3, 6, 7, 1, 9], { iterationType: 'RECURSIVE', isReverse: true }); expect(avl.size).toBe(5); avl.add(2); avl.add(5); avl.add(4); expect(avl.root?.key).toBe(3); expect(avl.root?.left?.key).toBe(7); expect(avl.root?.left?.left?.key).toBe(9); expect(avl.root?.right?.key).toBe(1); expect(avl.root?.right?.left?.key).toBe(2); expect(avl.getNode(7)?.left?.key).toBe(9); expect(avl.getHeight()).toBe(3); expect(avl.has(9)).toBe(true); expect(avl.has(7)).toBe(true); expect(avl.delete(7)[0].deleted?.key).toBe(7); expect(avl.has(7)).toBe(false); expect(avl.size).toBe(7); expect(avl.root?.key).toBe(3); expect(avl.root?.left?.key).toBe(5); expect(avl.root?.right?.key).toBe(1); expect(avl.root?.right?.left?.key).toBe(2); expect(avl.getNode(6)?.left?.key).toBe(undefined); expect(avl.getHeight()).toBe(3); expect(avl.has(9)).toBe(true); expect(avl.has(7)).toBe(false); expect(avl.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]); const clonedAVL = avl.clone(); expect(clonedAVL.size).toBe(7); expect(clonedAVL.root?.key).toBe(3); expect(clonedAVL.root?.left?.key).toBe(5); expect(clonedAVL.root?.right?.key).toBe(1); expect(clonedAVL.root?.right?.left?.key).toBe(2); expect(clonedAVL.getNode(6)?.left?.key).toBe(undefined); expect(clonedAVL.getHeight()).toBe(3); expect(clonedAVL.has(9)).toBe(true); expect(clonedAVL.has(7)).toBe(false); expect(clonedAVL.bfs()).toEqual([3, 5, 1, 9, 4, 2, 6]); }); it('Should clone a TreeMultiMap works fine', () => { const tmm = new TreeMultiMap<number>([3, 6, 7, 1, 9], { iterationType: 'RECURSIVE' }); expect(tmm.size).toBe(5); tmm.add(2); tmm.add(2); tmm.add(2); tmm.add(5); tmm.add(4); expect(tmm.root?.key).toBe(3); expect(tmm.root?.left?.key).toBe(1); expect(tmm.root?.left?.left?.key).toBe(NaN); expect(tmm.root?.right?.key).toBe(7); expect(tmm.root?.right?.left?.key).toBe(5); expect(tmm.getNode(7)?.left?.key).toBe(5); expect(tmm.getHeight()).toBe(3); expect(tmm.has(9)).toBe(true); expect(tmm.has(7)).toBe(true); expect(tmm.delete(7)[0].deleted?.key).toBe(7); expect(tmm.has(7)).toBe(false); expect(tmm.size).toBe(7); expect(tmm.root?.key).toBe(3); expect(tmm.root?.left?.key).toBe(1); expect(tmm.root?.right?.key).toBe(9); expect(tmm.root?.right?.left?.key).toBe(5); expect(tmm.getNode(6)?.left?.key).toBe(NaN); expect(tmm.getHeight()).toBe(3); expect(tmm.has(9)).toBe(true); expect(tmm.has(7)).toBe(false); expect(tmm.bfs()).toEqual([3, 1, 9, 2, 5, 4, 6]); // expect(tmm.bfs()).toEqual([6, 1, 9, 3, 2, 5, 4]); const clonedTMM = tmm.clone(); expect(clonedTMM.size).toBe(7); expect(clonedTMM.root?.key).toBe(3); expect(clonedTMM.root?.left?.key).toBe(1); expect(clonedTMM.root?.right?.key).toBe(5); expect(clonedTMM.root?.right?.left?.key).toBe(4); expect(clonedTMM.getNode(6)?.left?.key).toBe(NaN); expect(clonedTMM.getHeight()).toBe(3); expect(clonedTMM.has(9)).toBe(true); expect(clonedTMM.has(7)).toBe(false); expect(clonedTMM.bfs()).toEqual([3, 1, 5, 2, 4, 9, 6]); }); it('Should clone a RedBlackTree works fine', () => { const rbTree = new RedBlackTree<number>([3, 6, 7, 1, 9], { iterationType: 'RECURSIVE' }); expect(rbTree.size).toBe(5); rbTree.add(2); rbTree.add(2); rbTree.add(2); rbTree.add(5); rbTree.add(4); expect(rbTree.root?.key).toBe(3); expect(rbTree.root?.left?.key).toBe(1); expect(rbTree.root?.left?.left?.key).toBe(NaN); expect(rbTree.root?.right?.key).toBe(7); expect(rbTree.root?.right?.left?.key).toBe(5); expect(rbTree.getNode(7)?.left?.key).toBe(5); expect(rbTree.getHeight()).toBe(3); expect(rbTree.has(9)).toBe(true); expect(rbTree.has(7)).toBe(true); expect(rbTree.delete(7)?.[0]?.deleted?.key).toBe(7); expect(rbTree.has(7)).toBe(false); expect(rbTree.size).toBe(7); expect(rbTree.root?.key).toBe(3); expect(rbTree.root?.left?.key).toBe(1); expect(rbTree.root?.right?.key).toBe(9); expect(rbTree.root?.right?.left?.key).toBe(5); expect(rbTree.getNode(6)?.left?.key).toBe(NaN); expect(rbTree.getHeight()).toBe(3); expect(rbTree.has(9)).toBe(true); expect(rbTree.has(7)).toBe(false); // expect(rbTree.bfs()).toEqual([3, 1, 5, 2, 4, 9, 6]); expect(rbTree.bfs()).toEqual([3, 1, 9, 2, 5, 4, 6]); const clonedRbTree = rbTree.clone(); expect(clonedRbTree.size).toBe(7); expect(clonedRbTree.root?.key).toBe(3); expect(clonedRbTree.root?.left?.key).toBe(1); expect(clonedRbTree.root?.right?.key).toBe(5); expect(clonedRbTree.root?.right?.left?.key).toBe(4); expect(clonedRbTree.getNode(6)?.left?.key).toBe(NaN); expect(clonedRbTree.getHeight()).toBe(3); expect(clonedRbTree.has(9)).toBe(true); expect(clonedRbTree.has(7)).toBe(false); expect(clonedRbTree.bfs()).toEqual([3, 1, 5, 2, 4, 9, 6]); }); });