From ed1ecf541f7d3dc936a61f9a6844b816050e72f9 Mon Sep 17 00:00:00 2001 From: Revone Date: Tue, 10 Oct 2023 21:56:55 +0800 Subject: [PATCH] [binary-tree] unnecessary geters and setters removed --- package-lock.json | 50 +++--- package.json | 10 +- .../binary-tree/abstract-binary-tree.ts | 118 +++------------ src/data-structures/binary-tree/avl-tree.ts | 29 ++++ .../binary-tree/tree-multiset.ts | 16 +- src/interfaces/abstract-binary-tree.ts | 16 +- src/interfaces/avl-tree.ts | 4 +- src/interfaces/bst.ts | 2 +- test/integration/avl-tree.test.ts | 48 +++--- test/integration/bst.test.ts | 142 +++++++++--------- .../binary-tree/binary-tree.test.ts | 8 - 11 files changed, 187 insertions(+), 256 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9fec503..540e380 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "data-structure-typed", - "version": "1.34.2", + "version": "1.34.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "data-structure-typed", - "version": "1.34.2", + "version": "1.34.8", "license": "MIT", "devDependencies": { "@types/benchmark": "^2.1.3", @@ -15,17 +15,17 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "auto-changelog": "^2.4.0", - "avl-tree-typed": "^1.34.1", + "avl-tree-typed": "^1.34.8", "benchmark": "^2.1.4", - "binary-tree-typed": "^1.34.1", - "bst-typed": "^1.34.1", + "binary-tree-typed": "^1.34.8", + "bst-typed": "^1.34.8", "dependency-cruiser": "^14.1.0", "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.28.1", - "heap-typed": "^1.34.1", + "heap-typed": "^1.34.8", "istanbul-badges-readme": "^1.8.5", "jest": "^29.7.0", "prettier": "^3.0.3", @@ -2393,12 +2393,12 @@ } }, "node_modules/avl-tree-typed": { - "version": "1.34.1", - "resolved": "https://registry.npmjs.org/avl-tree-typed/-/avl-tree-typed-1.34.1.tgz", - "integrity": "sha512-5SgeKmOZivy6krk/KoKswaQVdaEXSZCkGWq+5yjfnszYKpwZzkijN/CAw1r/S1keF7L9cNA+wUMaE6XBE/KZOQ==", + "version": "1.34.8", + "resolved": "https://registry.npmjs.org/avl-tree-typed/-/avl-tree-typed-1.34.8.tgz", + "integrity": "sha512-5f4zkcP3qspipM0OJ1VY5t/77wbWHOto5QgUCX+YuXMlpkMwquAiTg7hSqOQJaLFCmol28BkfdxJfzVB0T08Kg==", "dev": true, "dependencies": { - "data-structure-typed": "^1.34.1" + "data-structure-typed": "^1.34.8" } }, "node_modules/babel-jest": { @@ -2583,12 +2583,12 @@ } }, "node_modules/binary-tree-typed": { - "version": "1.34.1", - "resolved": "https://registry.npmjs.org/binary-tree-typed/-/binary-tree-typed-1.34.1.tgz", - "integrity": "sha512-ar2ROpvmPVN9ZlEP094lkV0mZdP+8cqWjUaLzQHuMk6jXUSfo3i95iIFJCVTqX0v3tZpCH51OfQoJxBX130eQQ==", + "version": "1.34.8", + "resolved": "https://registry.npmjs.org/binary-tree-typed/-/binary-tree-typed-1.34.8.tgz", + "integrity": "sha512-sDsvV0tvs1tullwIoA6/gak+9vHQAOnXQvbNn9SyMBp2IMeIhNRC9SpHKPU75AgtBiSqVJ3qxMYE6uw360UzcQ==", "dev": true, "dependencies": { - "data-structure-typed": "^1.34.1" + "data-structure-typed": "^1.34.8" } }, "node_modules/brace-expansion": { @@ -2667,12 +2667,12 @@ } }, "node_modules/bst-typed": { - "version": "1.34.1", - "resolved": "https://registry.npmjs.org/bst-typed/-/bst-typed-1.34.1.tgz", - "integrity": "sha512-z5K3SXz71CufxYEh3ztzzfubfsJSFQW6J6p2zJL8EZrbLACFOmP6/B/3sFFsWzHiFuTrn/imWRycYQbjDR/YPw==", + "version": "1.34.8", + "resolved": "https://registry.npmjs.org/bst-typed/-/bst-typed-1.34.8.tgz", + "integrity": "sha512-sEqjh8ouZaCD5Tt6IicNTNaeYzpSdeaVRBiHXtYdla5YAMRpiBepw+O1gfwOpKlLTNqVY/wEt2zGgtWmfLKB+Q==", "dev": true, "dependencies": { - "data-structure-typed": "^1.34.1" + "data-structure-typed": "^1.34.8" } }, "node_modules/buffer-from": { @@ -3024,9 +3024,9 @@ } }, "node_modules/data-structure-typed": { - "version": "1.34.1", - "resolved": "https://registry.npmjs.org/data-structure-typed/-/data-structure-typed-1.34.1.tgz", - "integrity": "sha512-/qNoKl1/cPpZUR7V8qMNS+WOqLIz4RVEuVZeOilJGCfWerbx/bPEtQsqEKMXLwclQJ4KLKSAoblJNPCIEuUYRw==", + "version": "1.34.8", + "resolved": "https://registry.npmjs.org/data-structure-typed/-/data-structure-typed-1.34.8.tgz", + "integrity": "sha512-8pQJxRvlOHnZ6pwgk2BZWKhd8hxkV+waJgX0SIS3tSJv00WB0vRfg610pLWuBxBdnmnFvFIX6HGFUUH6ERRDIw==", "dev": true }, "node_modules/debug": { @@ -4356,12 +4356,12 @@ } }, "node_modules/heap-typed": { - "version": "1.34.1", - "resolved": "https://registry.npmjs.org/heap-typed/-/heap-typed-1.34.1.tgz", - "integrity": "sha512-yXOmzX/6xcX3CdIoM/RmaPpzz4oftZtSfOU8ru21+bZUzCYiRs5cY7oXGXux9LmUgowrxQgvNveRD1AZYPzXhQ==", + "version": "1.34.8", + "resolved": "https://registry.npmjs.org/heap-typed/-/heap-typed-1.34.8.tgz", + "integrity": "sha512-jgd/JSdk3qZKI1luGL+O48plcIAxv6ZGPbb4bA0iVOs1jBXAZLQam92Yc91DkU2a8tSW+5c8sBIy3CkGE3ZRrA==", "dev": true, "dependencies": { - "data-structure-typed": "^1.34.1" + "data-structure-typed": "^1.34.8" } }, "node_modules/html-escaper": { diff --git a/package.json b/package.json index a2c2188..8d9b581 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "fix:test": "npm run lint:test && npm run format:test", "fix": "npm run fix:src && npm run fix:test", "update:test-deps": "npm i avl-tree-typed binary-tree-typed bst-typed heap-typed --save-dev", - "update-all:test-deps": "npm i avl-tree-typed binary-tree-typed bst-typed deque-typed directed-graph-typed doubly-linked-list-typed graph-typed heap-typed linked-list-typed max-heap-typed max-priority-queue-typed min-heap-typed min-priority-queue-typed priority-queue-typed singly-linked-list-typed stack-typed tree-multiset-typed trie-typed undirected-graph-typed queue-typed --save-dev", + "install:individuals": "npm i avl-tree-typed binary-tree-typed bst-typed deque-typed directed-graph-typed doubly-linked-list-typed graph-typed heap-typed linked-list-typed max-heap-typed max-priority-queue-typed min-heap-typed min-priority-queue-typed priority-queue-typed singly-linked-list-typed stack-typed tree-multiset-typed trie-typed undirected-graph-typed queue-typed --save-dev", "test": "jest", "check:deps": "dependency-cruiser src", "changelog": "auto-changelog", @@ -50,17 +50,17 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "auto-changelog": "^2.4.0", - "avl-tree-typed": "^1.34.1", + "avl-tree-typed": "^1.34.8", "benchmark": "^2.1.4", - "binary-tree-typed": "^1.34.1", - "bst-typed": "^1.34.1", + "binary-tree-typed": "^1.34.8", + "bst-typed": "^1.34.8", "dependency-cruiser": "^14.1.0", "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.28.1", - "heap-typed": "^1.34.1", + "heap-typed": "^1.34.8", "istanbul-badges-readme": "^1.8.5", "jest": "^29.7.0", "prettier": "^3.0.3", diff --git a/src/data-structures/binary-tree/abstract-binary-tree.ts b/src/data-structures/binary-tree/abstract-binary-tree.ts index 4beedca..b94c8a5 100644 --- a/src/data-structures/binary-tree/abstract-binary-tree.ts +++ b/src/data-structures/binary-tree/abstract-binary-tree.ts @@ -26,36 +26,20 @@ export abstract class AbstractBinaryTreeNode< > implements IAbstractBinaryTreeNode { /** - * The constructor function initializes a BinaryTreeNode object with an key and an optional value. + * The constructor function initializes a BinaryTreeNode object with a key and an optional value. * @param {BinaryTreeNodeKey} key - The `key` parameter is of type `BinaryTreeNodeKey` and represents the unique identifier * of the binary tree node. It is used to distinguish one node from another in the binary tree. * @param {V} [val] - The "val" parameter is an optional parameter of type V. It represents the value that will be * stored in the binary tree node. If no value is provided, it will be set to undefined. */ protected constructor(key: BinaryTreeNodeKey, val?: V) { - this._key = key; - this._val = val; + this.key = key; + this.val = val; } - private _key: BinaryTreeNodeKey; + key: BinaryTreeNodeKey; - get key(): BinaryTreeNodeKey { - return this._key; - } - - set key(v: BinaryTreeNodeKey) { - this._key = v; - } - - private _val: V | undefined; - - get val(): V | undefined { - return this._val; - } - - set val(value: V | undefined) { - this._val = value; - } + val: V | undefined; private _left: NEIGHBOR | null | undefined; @@ -83,25 +67,7 @@ export abstract class AbstractBinaryTreeNode< this._right = v; } - private _parent: NEIGHBOR | null | undefined; - - get parent(): NEIGHBOR | null | undefined { - return this._parent; - } - - set parent(v: NEIGHBOR | null | undefined) { - this._parent = v; - } - - private _height = 0; - - get height(): number { - return this._height; - } - - set height(v: number) { - this._height = v; - } + parent: NEIGHBOR | null | undefined; /** * The function determines the position of a node in a family tree structure. @@ -169,23 +135,11 @@ export abstract class AbstractBinaryTree) { - this._visitedVal = value; - } - - /** - * The function sets the value of the _visitedNode property. - * @param {N[]} value - N[] is an array of elements of type N. - */ - protected _setVisitedNode(value: N[]) { - this._visitedNode = value; - } - /** * The function sets the root property of an object to a given value, and if the value is not null, it also sets the * parent property of the value to undefined. @@ -1502,9 +1428,9 @@ export abstract class AbstractBinaryTree = AV extends BSTNode implements IAVLTreeNode { + height: number; + constructor(key: BinaryTreeNodeKey, val?: V) { super(key, val); + this.height = 0; } } @@ -29,6 +32,32 @@ export class AVLTree = AVLTreeNode> extends B super(options); } + /** + * The `swapLocation` function swaps the location of two nodes in a binary tree. + * @param {N} srcNode - The source node that you want to swap with the destination node. + * @param {N} destNode - The `destNode` parameter represents the destination node where the values from `srcNode` will + * be swapped to. + * @returns The `destNode` is being returned. + */ + override swapLocation(srcNode: N, destNode: N): N { + const {key, val, height} = destNode; + const tempNode = this.createNode(key, val); + + if (tempNode) { + tempNode.height = height; + + destNode.key = srcNode.key; + destNode.val = srcNode.val; + destNode.height = srcNode.height; + + srcNode.key = tempNode.key; + srcNode.val = tempNode.val; + srcNode.height = tempNode.height; + } + + return destNode; + } + /** * The function creates a new AVL tree node with the given key and value. * @param {BinaryTreeNodeKey} key - The `key` parameter is the identifier for the binary tree node. It is used to uniquely diff --git a/src/data-structures/binary-tree/tree-multiset.ts b/src/data-structures/binary-tree/tree-multiset.ts index 098934f..8735a20 100644 --- a/src/data-structures/binary-tree/tree-multiset.ts +++ b/src/data-structures/binary-tree/tree-multiset.ts @@ -15,7 +15,7 @@ export class TreeMultisetNode { /** - * The constructor function initializes a BinaryTreeNode object with an key, value, and count. + * The constructor function initializes a BinaryTreeNode object with a key, value, and count. * @param {BinaryTreeNodeKey} key - The `key` parameter is of type `BinaryTreeNodeKey` and represents the unique identifier * of the binary tree node. * @param {V} [val] - The `val` parameter is an optional parameter of type `V`. It represents the value of the binary @@ -26,18 +26,10 @@ export class TreeMultisetNode = TreeMultiset * TreeMultiset. */ constructor(options?: TreeMultisetOptions) { - super({...options}); + super(options); } private _count = 0; diff --git a/src/interfaces/abstract-binary-tree.ts b/src/interfaces/abstract-binary-tree.ts index 62c6933..f75caa8 100644 --- a/src/interfaces/abstract-binary-tree.ts +++ b/src/interfaces/abstract-binary-tree.ts @@ -12,13 +12,9 @@ import { import {AbstractBinaryTreeNode} from '../data-structures'; export interface IAbstractBinaryTreeNode> { - get key(): BinaryTreeNodeKey; + key: BinaryTreeNodeKey; - set key(v: BinaryTreeNodeKey); - - get val(): T | undefined; - - set val(v: T | undefined); + val: T | undefined; get left(): NEIGHBOR | null | undefined; @@ -28,15 +24,9 @@ export interface IAbstractBinaryTreeNode> { diff --git a/src/interfaces/avl-tree.ts b/src/interfaces/avl-tree.ts index 7d3ff8a..a98d421 100644 --- a/src/interfaces/avl-tree.ts +++ b/src/interfaces/avl-tree.ts @@ -2,7 +2,9 @@ import {AVLTreeNode} from '../data-structures'; import {IBST, IBSTNode} from './bst'; import {BinaryTreeDeletedResult, BinaryTreeNodeKey} from '../types'; -export type IAVLTreeNode> = IBSTNode; +export interface IAVLTreeNode> extends IBSTNode { + height: number; +} export interface IAVLTree> extends IBST { add(key: BinaryTreeNodeKey, val?: N['val'] | null): N | null | undefined; diff --git a/src/interfaces/bst.ts b/src/interfaces/bst.ts index a95db16..29fd7f2 100644 --- a/src/interfaces/bst.ts +++ b/src/interfaces/bst.ts @@ -2,7 +2,7 @@ import {BSTNode} from '../data-structures'; import {IBinaryTree, IBinaryTreeNode} from './binary-tree'; import {BinaryTreeDeletedResult, BinaryTreeNodeKey, BinaryTreeNodePropertyName} from '../types'; -export type IBSTNode> = IBinaryTreeNode; +export interface IBSTNode> extends IBinaryTreeNode {} export interface IBST> extends IBinaryTree { createNode(key: BinaryTreeNodeKey, val?: N['val'], count?: number): N; diff --git a/test/integration/avl-tree.test.ts b/test/integration/avl-tree.test.ts index 7d4c3e6..7e65b6d 100644 --- a/test/integration/avl-tree.test.ts +++ b/test/integration/avl-tree.test.ts @@ -12,15 +12,15 @@ describe('AVL Tree Test', () => { expect(node6 && tree.getHeight(node6)).toBe(3); expect(node6 && tree.getDepth(node6)).toBe(1); - const getNodeById = tree.get(10, 'id'); - expect(getNodeById?.id).toBe(10); + const getNodeById = tree.get(10, 'key'); + expect(getNodeById?.key).toBe(10); const getMinNodeByRoot = tree.getLeftMost(); - expect(getMinNodeByRoot?.id).toBe(1); + expect(getMinNodeByRoot?.key).toBe(1); const node15 = tree.get(15); const getMinNodeBySpecificNode = node15 && tree.getLeftMost(node15); - expect(getMinNodeBySpecificNode?.id).toBe(12); + expect(getMinNodeBySpecificNode?.key).toBe(12); const subTreeSum = node15 && tree.subTreeSum(node15); expect(subTreeSum).toBe(70); @@ -32,65 +32,65 @@ describe('AVL Tree Test', () => { expect(node15?.val).toBe(15); const dfs = tree.DFS('in', 'node'); - expect(dfs[0].id).toBe(1); - expect(dfs[dfs.length - 1].id).toBe(16); + expect(dfs[0].key).toBe(1); + expect(dfs[dfs.length - 1].key).toBe(16); tree.perfectlyBalance(); const bfs = tree.BFS('node'); expect(tree.isPerfectlyBalanced()).toBe(true); - expect(bfs[0].id).toBe(8); - expect(bfs[bfs.length - 1].id).toBe(16); + expect(bfs[0].key).toBe(8); + expect(bfs[bfs.length - 1].key).toBe(16); - expect(tree.remove(11)[0].deleted?.id).toBe(11); + expect(tree.remove(11)[0].deleted?.key).toBe(11); expect(tree.isAVLBalanced()).toBe(true); expect(node15 && tree.getHeight(node15)).toBe(2); - expect(tree.remove(1)[0].deleted?.id).toBe(1); + expect(tree.remove(1)[0].deleted?.key).toBe(1); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(4); - expect(tree.remove(4)[0].deleted?.id).toBe(4); + expect(tree.remove(4)[0].deleted?.key).toBe(4); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(4); - expect(tree.remove(10)[0].deleted?.id).toBe(10); + expect(tree.remove(10)[0].deleted?.key).toBe(10); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(15)[0].deleted?.id).toBe(15); + expect(tree.remove(15)[0].deleted?.key).toBe(15); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(5)[0].deleted?.id).toBe(5); + expect(tree.remove(5)[0].deleted?.key).toBe(5); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(13)[0].deleted?.id).toBe(13); + expect(tree.remove(13)[0].deleted?.key).toBe(13); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(3)[0].deleted?.id).toBe(3); + expect(tree.remove(3)[0].deleted?.key).toBe(3); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(8)[0].deleted?.id).toBe(8); + expect(tree.remove(8)[0].deleted?.key).toBe(8); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(3); - expect(tree.remove(6)[0].deleted?.id).toBe(6); + expect(tree.remove(6)[0].deleted?.key).toBe(6); expect(tree.remove(6).length).toBe(0); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(2); - expect(tree.remove(7)[0].deleted?.id).toBe(7); + expect(tree.remove(7)[0].deleted?.key).toBe(7); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(2); - expect(tree.remove(9)[0].deleted?.id).toBe(9); + expect(tree.remove(9)[0].deleted?.key).toBe(9); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(2); - expect(tree.remove(14)[0].deleted?.id).toBe(14); + expect(tree.remove(14)[0].deleted?.key).toBe(14); expect(tree.isAVLBalanced()).toBe(true); expect(tree.getHeight()).toBe(1); @@ -101,8 +101,8 @@ describe('AVL Tree Test', () => { expect(lastBFSIds[2]).toBe(16); const lastBFSNodes = tree.BFS('node'); - expect(lastBFSNodes[0].id).toBe(12); - expect(lastBFSNodes[1].id).toBe(2); - expect(lastBFSNodes[2].id).toBe(16); + expect(lastBFSNodes[0].key).toBe(12); + expect(lastBFSNodes[1].key).toBe(2); + expect(lastBFSNodes[2].key).toBe(16); }); }); diff --git a/test/integration/bst.test.ts b/test/integration/bst.test.ts index 54ffc16..3a82466 100644 --- a/test/integration/bst.test.ts +++ b/test/integration/bst.test.ts @@ -10,7 +10,7 @@ describe('Individual package BST operations test', () => { bst.addMany(idsOrVals, idsOrVals); expect(bst.root).toBeInstanceOf(BSTNode); - if (bst.root) expect(bst.root.id).toBe(11); + if (bst.root) expect(bst.root.key).toBe(11); expect(bst.size).toBe(16); @@ -21,17 +21,17 @@ describe('Individual package BST operations test', () => { expect(node6 && bst.getDepth(6)).toBe(3); const nodeId10 = bst.get(10); - expect(nodeId10?.id).toBe(10); + expect(nodeId10?.key).toBe(10); const nodeVal9 = bst.get(9, 'val'); - expect(nodeVal9?.id).toBe(9); + expect(nodeVal9?.key).toBe(9); const leftMost = bst.getLeftMost(); - expect(leftMost?.id).toBe(1); + expect(leftMost?.key).toBe(1); const node15 = bst.get(15); const minNodeBySpecificNode = node15 && bst.getLeftMost(node15); - expect(minNodeBySpecificNode?.id).toBe(12); + expect(minNodeBySpecificNode?.key).toBe(12); const subTreeSum = node15 && bst.subTreeSum(15); expect(subTreeSum).toBe(70); @@ -45,22 +45,22 @@ describe('Individual package BST operations test', () => { expect(node11).toBeInstanceOf(BSTNode); const dfsInorderNodes = bst.DFS('in', 'node'); - expect(dfsInorderNodes[0].id).toBe(1); - expect(dfsInorderNodes[dfsInorderNodes.length - 1].id).toBe(16); + expect(dfsInorderNodes[0].key).toBe(1); + expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16); bst.perfectlyBalance(); expect(bst.isPerfectlyBalanced()).toBe(true); const bfsNodesAfterBalanced = bst.BFS('node'); - expect(bfsNodesAfterBalanced[0].id).toBe(8); - expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16); + expect(bfsNodesAfterBalanced[0].key).toBe(8); + expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16); const removed11 = bst.remove(11); expect(removed11).toBeInstanceOf(Array); expect(removed11[0]).toBeDefined(); expect(removed11[0].deleted).toBeDefined(); - if (removed11[0].deleted) expect(removed11[0].deleted.id).toBe(11); + if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11); expect(bst.isAVLBalanced()).toBe(true); @@ -70,7 +70,7 @@ describe('Individual package BST operations test', () => { expect(removed1).toBeInstanceOf(Array); expect(removed1[0]).toBeDefined(); expect(removed1[0].deleted).toBeDefined(); - if (removed1[0].deleted) expect(removed1[0].deleted.id).toBe(1); + if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1); expect(bst.isAVLBalanced()).toBe(true); @@ -80,7 +80,7 @@ describe('Individual package BST operations test', () => { expect(removed4).toBeInstanceOf(Array); expect(removed4[0]).toBeDefined(); expect(removed4[0].deleted).toBeDefined(); - if (removed4[0].deleted) expect(removed4[0].deleted.id).toBe(4); + if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4); expect(bst.isAVLBalanced()).toBe(true); expect(bst.getHeight()).toBe(4); @@ -88,7 +88,7 @@ describe('Individual package BST operations test', () => { expect(removed10).toBeInstanceOf(Array); expect(removed10[0]).toBeDefined(); expect(removed10[0].deleted).toBeDefined(); - if (removed10[0].deleted) expect(removed10[0].deleted.id).toBe(10); + if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(4); @@ -96,7 +96,7 @@ describe('Individual package BST operations test', () => { expect(removed15).toBeInstanceOf(Array); expect(removed15[0]).toBeDefined(); expect(removed15[0].deleted).toBeDefined(); - if (removed15[0].deleted) expect(removed15[0].deleted.id).toBe(15); + if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15); expect(bst.isAVLBalanced()).toBe(true); expect(bst.getHeight()).toBe(3); @@ -105,7 +105,7 @@ describe('Individual package BST operations test', () => { expect(removed5).toBeInstanceOf(Array); expect(removed5[0]).toBeDefined(); expect(removed5[0].deleted).toBeDefined(); - if (removed5[0].deleted) expect(removed5[0].deleted.id).toBe(5); + if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5); expect(bst.isAVLBalanced()).toBe(true); expect(bst.getHeight()).toBe(3); @@ -114,7 +114,7 @@ describe('Individual package BST operations test', () => { expect(removed13).toBeInstanceOf(Array); expect(removed13[0]).toBeDefined(); expect(removed13[0].deleted).toBeDefined(); - if (removed13[0].deleted) expect(removed13[0].deleted.id).toBe(13); + if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13); expect(bst.isAVLBalanced()).toBe(true); expect(bst.getHeight()).toBe(3); @@ -122,7 +122,7 @@ describe('Individual package BST operations test', () => { expect(removed3).toBeInstanceOf(Array); expect(removed3[0]).toBeDefined(); expect(removed3[0].deleted).toBeDefined(); - if (removed3[0].deleted) expect(removed3[0].deleted.id).toBe(3); + if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(3); @@ -130,7 +130,7 @@ describe('Individual package BST operations test', () => { expect(removed8).toBeInstanceOf(Array); expect(removed8[0]).toBeDefined(); expect(removed8[0].deleted).toBeDefined(); - if (removed8[0].deleted) expect(removed8[0].deleted.id).toBe(8); + if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8); expect(bst.isAVLBalanced()).toBe(true); expect(bst.getHeight()).toBe(3); @@ -138,7 +138,7 @@ describe('Individual package BST operations test', () => { expect(removed6).toBeInstanceOf(Array); expect(removed6[0]).toBeDefined(); expect(removed6[0].deleted).toBeDefined(); - if (removed6[0].deleted) expect(removed6[0].deleted.id).toBe(6); + if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6); expect(bst.remove(6).length).toBe(0); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(3); @@ -147,7 +147,7 @@ describe('Individual package BST operations test', () => { expect(removed7).toBeInstanceOf(Array); expect(removed7[0]).toBeDefined(); expect(removed7[0].deleted).toBeDefined(); - if (removed7[0].deleted) expect(removed7[0].deleted.id).toBe(7); + if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(3); @@ -155,7 +155,7 @@ describe('Individual package BST operations test', () => { expect(removed9).toBeInstanceOf(Array); expect(removed9[0]).toBeDefined(); expect(removed9[0].deleted).toBeDefined(); - if (removed9[0].deleted) expect(removed9[0].deleted.id).toBe(9); + if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(3); @@ -163,7 +163,7 @@ describe('Individual package BST operations test', () => { expect(removed14).toBeInstanceOf(Array); expect(removed14[0]).toBeDefined(); expect(removed14[0].deleted).toBeDefined(); - if (removed14[0].deleted) expect(removed14[0].deleted.id).toBe(14); + if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14); expect(bst.isAVLBalanced()).toBe(false); expect(bst.getHeight()).toBe(2); @@ -175,41 +175,41 @@ describe('Individual package BST operations test', () => { expect(bfsIDs[2]).toBe(16); const bfsNodes = bst.BFS('node'); - expect(bfsNodes[0].id).toBe(2); - expect(bfsNodes[1].id).toBe(12); - expect(bfsNodes[2].id).toBe(16); + expect(bfsNodes[0].key).toBe(2); + expect(bfsNodes[1].key).toBe(12); + expect(bfsNodes[2].key).toBe(16); }); it('should perform various operations on a Binary Search Tree with object values', () => { - const objBST = new BST>(); + const objBST = new BST>(); expect(objBST).toBeInstanceOf(BST); - objBST.add(11, {id: 11, keyA: 11}); - objBST.add(3, {id: 3, keyA: 3}); + objBST.add(11, {key: 11, keyA: 11}); + objBST.add(3, {key: 3, keyA: 3}); const values = [ - {id: 15, keyA: 15}, - {id: 1, keyA: 1}, - {id: 8, keyA: 8}, - {id: 13, keyA: 13}, - {id: 16, keyA: 16}, - {id: 2, keyA: 2}, - {id: 6, keyA: 6}, - {id: 9, keyA: 9}, - {id: 12, keyA: 12}, - {id: 14, keyA: 14}, - {id: 4, keyA: 4}, - {id: 7, keyA: 7}, - {id: 10, keyA: 10}, - {id: 5, keyA: 5} + {key: 15, keyA: 15}, + {key: 1, keyA: 1}, + {key: 8, keyA: 8}, + {key: 13, keyA: 13}, + {key: 16, keyA: 16}, + {key: 2, keyA: 2}, + {key: 6, keyA: 6}, + {key: 9, keyA: 9}, + {key: 12, keyA: 12}, + {key: 14, keyA: 14}, + {key: 4, keyA: 4}, + {key: 7, keyA: 7}, + {key: 10, keyA: 10}, + {key: 5, keyA: 5} ]; objBST.addMany( - values.map(item => item.id), + values.map(item => item.key), values ); expect(objBST.root).toBeInstanceOf(BSTNode); - if (objBST.root) expect(objBST.root.id).toBe(11); + if (objBST.root) expect(objBST.root.key).toBe(11); expect(objBST.has(6)).toBe(true); @@ -217,19 +217,19 @@ describe('Individual package BST operations test', () => { expect(node6 && objBST.getHeight(node6)).toBe(2); expect(node6 && objBST.getDepth(node6)).toBe(3); - const nodeId10 = objBST.get(10, 'id'); - expect(nodeId10?.id).toBe(10); + const nodeId10 = objBST.get(10, 'key'); + expect(nodeId10?.key).toBe(10); - const nodeVal9 = objBST.get(9, 'id'); - expect(nodeVal9?.id).toBe(9); + const nodeVal9 = objBST.get(9, 'key'); + expect(nodeVal9?.key).toBe(9); const leftMost = objBST.getLeftMost(); - expect(leftMost?.id).toBe(1); + expect(leftMost?.key).toBe(1); const node15 = objBST.get(15); - expect(node15?.val).toEqual({id: 15, keyA: 15}); + expect(node15?.val).toEqual({key: 15, keyA: 15}); const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15); - expect(minNodeBySpecificNode?.id).toBe(12); + expect(minNodeBySpecificNode?.key).toBe(12); const subTreeSum = node15 && objBST.subTreeSum(node15); expect(subTreeSum).toBe(70); @@ -243,22 +243,22 @@ describe('Individual package BST operations test', () => { expect(node11).toBeInstanceOf(BSTNode); const dfsInorderNodes = objBST.DFS('in', 'node'); - expect(dfsInorderNodes[0].id).toBe(1); - expect(dfsInorderNodes[dfsInorderNodes.length - 1].id).toBe(16); + expect(dfsInorderNodes[0].key).toBe(1); + expect(dfsInorderNodes[dfsInorderNodes.length - 1].key).toBe(16); objBST.perfectlyBalance(); expect(objBST.isPerfectlyBalanced()).toBe(true); const bfsNodesAfterBalanced = objBST.BFS('node'); - expect(bfsNodesAfterBalanced[0].id).toBe(8); - expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].id).toBe(16); + expect(bfsNodesAfterBalanced[0].key).toBe(8); + expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16); const removed11 = objBST.remove(11); expect(removed11).toBeInstanceOf(Array); expect(removed11[0]).toBeDefined(); expect(removed11[0].deleted).toBeDefined(); - if (removed11[0].deleted) expect(removed11[0].deleted.id).toBe(11); + if (removed11[0].deleted) expect(removed11[0].deleted.key).toBe(11); expect(objBST.isAVLBalanced()).toBe(true); @@ -268,7 +268,7 @@ describe('Individual package BST operations test', () => { expect(removed1).toBeInstanceOf(Array); expect(removed1[0]).toBeDefined(); expect(removed1[0].deleted).toBeDefined(); - if (removed1[0].deleted) expect(removed1[0].deleted.id).toBe(1); + if (removed1[0].deleted) expect(removed1[0].deleted.key).toBe(1); expect(objBST.isAVLBalanced()).toBe(true); @@ -278,7 +278,7 @@ describe('Individual package BST operations test', () => { expect(removed4).toBeInstanceOf(Array); expect(removed4[0]).toBeDefined(); expect(removed4[0].deleted).toBeDefined(); - if (removed4[0].deleted) expect(removed4[0].deleted.id).toBe(4); + if (removed4[0].deleted) expect(removed4[0].deleted.key).toBe(4); expect(objBST.isAVLBalanced()).toBe(true); expect(objBST.getHeight()).toBe(4); @@ -286,7 +286,7 @@ describe('Individual package BST operations test', () => { expect(removed10).toBeInstanceOf(Array); expect(removed10[0]).toBeDefined(); expect(removed10[0].deleted).toBeDefined(); - if (removed10[0].deleted) expect(removed10[0].deleted.id).toBe(10); + if (removed10[0].deleted) expect(removed10[0].deleted.key).toBe(10); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(4); @@ -294,7 +294,7 @@ describe('Individual package BST operations test', () => { expect(removed15).toBeInstanceOf(Array); expect(removed15[0]).toBeDefined(); expect(removed15[0].deleted).toBeDefined(); - if (removed15[0].deleted) expect(removed15[0].deleted.id).toBe(15); + if (removed15[0].deleted) expect(removed15[0].deleted.key).toBe(15); expect(objBST.isAVLBalanced()).toBe(true); expect(objBST.getHeight()).toBe(3); @@ -303,7 +303,7 @@ describe('Individual package BST operations test', () => { expect(removed5).toBeInstanceOf(Array); expect(removed5[0]).toBeDefined(); expect(removed5[0].deleted).toBeDefined(); - if (removed5[0].deleted) expect(removed5[0].deleted.id).toBe(5); + if (removed5[0].deleted) expect(removed5[0].deleted.key).toBe(5); expect(objBST.isAVLBalanced()).toBe(true); expect(objBST.getHeight()).toBe(3); @@ -312,7 +312,7 @@ describe('Individual package BST operations test', () => { expect(removed13).toBeInstanceOf(Array); expect(removed13[0]).toBeDefined(); expect(removed13[0].deleted).toBeDefined(); - if (removed13[0].deleted) expect(removed13[0].deleted.id).toBe(13); + if (removed13[0].deleted) expect(removed13[0].deleted.key).toBe(13); expect(objBST.isAVLBalanced()).toBe(true); expect(objBST.getHeight()).toBe(3); @@ -320,7 +320,7 @@ describe('Individual package BST operations test', () => { expect(removed3).toBeInstanceOf(Array); expect(removed3[0]).toBeDefined(); expect(removed3[0].deleted).toBeDefined(); - if (removed3[0].deleted) expect(removed3[0].deleted.id).toBe(3); + if (removed3[0].deleted) expect(removed3[0].deleted.key).toBe(3); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(3); @@ -328,7 +328,7 @@ describe('Individual package BST operations test', () => { expect(removed8).toBeInstanceOf(Array); expect(removed8[0]).toBeDefined(); expect(removed8[0].deleted).toBeDefined(); - if (removed8[0].deleted) expect(removed8[0].deleted.id).toBe(8); + if (removed8[0].deleted) expect(removed8[0].deleted.key).toBe(8); expect(objBST.isAVLBalanced()).toBe(true); expect(objBST.getHeight()).toBe(3); @@ -336,7 +336,7 @@ describe('Individual package BST operations test', () => { expect(removed6).toBeInstanceOf(Array); expect(removed6[0]).toBeDefined(); expect(removed6[0].deleted).toBeDefined(); - if (removed6[0].deleted) expect(removed6[0].deleted.id).toBe(6); + if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6); expect(objBST.remove(6).length).toBe(0); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(3); @@ -345,7 +345,7 @@ describe('Individual package BST operations test', () => { expect(removed7).toBeInstanceOf(Array); expect(removed7[0]).toBeDefined(); expect(removed7[0].deleted).toBeDefined(); - if (removed7[0].deleted) expect(removed7[0].deleted.id).toBe(7); + if (removed7[0].deleted) expect(removed7[0].deleted.key).toBe(7); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(3); @@ -353,7 +353,7 @@ describe('Individual package BST operations test', () => { expect(removed9).toBeInstanceOf(Array); expect(removed9[0]).toBeDefined(); expect(removed9[0].deleted).toBeDefined(); - if (removed9[0].deleted) expect(removed9[0].deleted.id).toBe(9); + if (removed9[0].deleted) expect(removed9[0].deleted.key).toBe(9); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(3); @@ -361,7 +361,7 @@ describe('Individual package BST operations test', () => { expect(removed14).toBeInstanceOf(Array); expect(removed14[0]).toBeDefined(); expect(removed14[0].deleted).toBeDefined(); - if (removed14[0].deleted) expect(removed14[0].deleted.id).toBe(14); + if (removed14[0].deleted) expect(removed14[0].deleted.key).toBe(14); expect(objBST.isAVLBalanced()).toBe(false); expect(objBST.getHeight()).toBe(2); @@ -373,8 +373,8 @@ describe('Individual package BST operations test', () => { expect(bfsIDs[2]).toBe(16); const bfsNodes = objBST.BFS('node'); - expect(bfsNodes[0].id).toBe(2); - expect(bfsNodes[1].id).toBe(12); - expect(bfsNodes[2].id).toBe(16); + expect(bfsNodes[0].key).toBe(2); + expect(bfsNodes[1].key).toBe(12); + expect(bfsNodes[2].key).toBe(16); }); }); diff --git a/test/unit/data-structures/binary-tree/binary-tree.test.ts b/test/unit/data-structures/binary-tree/binary-tree.test.ts index 326f574..ef211b7 100644 --- a/test/unit/data-structures/binary-tree/binary-tree.test.ts +++ b/test/unit/data-structures/binary-tree/binary-tree.test.ts @@ -52,14 +52,6 @@ describe('BinaryTreeNode', () => { expect(node1.left).toBe(node2); }); - it('should set and get the height correctly', () => { - const node = new BinaryTreeNode(1); - expect(node.height).toBe(0); - - node.height = 3; - expect(node.height).toBe(3); - }); - it('should determine family position correctly', () => { const root = new BinaryTreeNode(1); const leftChild = new BinaryTreeNode(2);