{"_id":"tree-multiset-typed","_rev":"88-a2f01e3e857ac9de499c69632bda1062","name":"tree-multiset-typed","dist-tags":{"latest":"2.6.0"},"versions":{"2.4.4":{"name":"tree-multiset-typed","version":"2.4.4","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.4.4","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"5804cffc3c502539a53bec016ab46b78ca242cd5","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.4.4.tgz","fileCount":273,"integrity":"sha512-jhhOtJ8s8LJCG43HVuHqlUiHtr4aS3uSrJYNoDs8kgyXW0I/kAmdJ+Gbmsr512lIyhcSQBQeqhsTrjTYSapbUQ==","signatures":[{"sig":"MEUCIQCTq+LSzw0jEuDiB1KWqnnGcbBwh2z20F4D9gRU4Jjm+gIgSnw8amlFku32V3M7azXEMiwfi2lDNqk/W+esQok8zqY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3736136},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.4.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.4.4_1774155285020_0.6004407319514098","host":"s3://npm-registry-packages-npm-production"}},"2.4.5":{"name":"tree-multiset-typed","version":"2.4.5","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.4.5","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"f97ab37fb033ae3ab1700e5fbd2ad27b7845fe0a","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.4.5.tgz","fileCount":273,"integrity":"sha512-6YONrGPx3GOoD2DjpJ/+yxbtGZS5Y396vZSDZ53ZYzxRK4TFP5CBvdguJaXp11jSOjasjMGoEm7lZFhKjBqocA==","signatures":[{"sig":"MEYCIQCoSknhVICOC6ZDWnmXpOqCZ5PqIWfJtWEV6pna8iGjywIhALAKoeE7nxkWO/3+O/HOncisAfHctWeecp6tgTWnbM6G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3797524},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.4.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.4.5_1774512625694_0.7447084458932571","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"tree-multiset-typed","version":"2.5.0","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.5.0","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"a7463e44c9afcd53fe3ef2bc3f6bb8e58564ec77","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.5.0.tgz","fileCount":273,"integrity":"sha512-+pfgEZVdzoK+PgIXfFeODHVl+OqHrRTek54m/1h4oAFN2pNeZJCOpH1M7tCvi2ehV0Po2mdhx260fT2b5T2pCA==","signatures":[{"sig":"MEUCIBXs+L0nlJR/ZYN5FQItuH2LtMIJe0ubvmlrOLW5PPTxAiEAtWSqtXwFHBEfeluGncXES44vrc9rCbR7N502JlZ7IRs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4235693},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.5.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.5.0_1774589531323_0.25967677224198726","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"tree-multiset-typed","version":"2.5.1","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.5.1","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"1b16955556e5691b8220141ff7e1f739d61ebaee","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.5.1.tgz","fileCount":273,"integrity":"sha512-7TF1aBNc0hefrA7DdCYO3sOhwm3ljmPtIUul0fbvpGrlqbNOlQL9hNXpa/7ZQoYrFDNBHFy9iJQ30GPk5As2wg==","signatures":[{"sig":"MEQCIApl+y5fklH8A+e44hFKu/ZNlTs0OdtYb9wf/kPtNdkVAiASyLxuKZTC+VFYJetQyr7Crb6kIJlFsZdDhgplGKAo+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4558722},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.5.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.5.1_1774692800214_0.11200142136694669","host":"s3://npm-registry-packages-npm-production"}},"2.5.2":{"name":"tree-multiset-typed","version":"2.5.2","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.5.2","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"3c5441c5c86ca2f0583dd84dcd81710516e5fdcb","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.5.2.tgz","fileCount":273,"integrity":"sha512-9Vp8JJSfiDO3Qvpd3KzqJb80oTqUZp8ZT1oW38oY5D2DhEkyobJmuv04+C4HBtxaxX7mRzLSOTVuI0nmUEKiCQ==","signatures":[{"sig":"MEUCIQCJBf9IWwTigzA+LUE2NwfaAZWqC4jhZ23l4qhhT3MCowIgcwud9SFDI53GVQ5qGbiPLo3jiV4Cl6YD7OGeSz7qejE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4692612},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.5.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.5.2_1774771486545_0.05185203942699923","host":"s3://npm-registry-packages-npm-production"}},"2.5.3":{"name":"tree-multiset-typed","version":"2.5.3","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","_id":"tree-multiset-typed@2.5.3","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"homepage":"https://data-structure-typed-docs.vercel.app","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"dist":{"shasum":"9c165c07da6de64d36e5d88990f3b66b878c08f0","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.5.3.tgz","fileCount":273,"integrity":"sha512-yZWCybavKYJaFS4ZevVAhQiMmDDpftf2mkL9LYoNHbfslnUzENhI2QlXNTfIj52XBByb5fTRBSJdVy4IRb8l9Q==","signatures":[{"sig":"MEQCIH6UQCQhY8Puzx0fKqM3WAbBbfkJulLu2N79wbvRDCTGAiB4ob/wb6c3JOEGt5L/1oWbzUHA9qskTj+1ttsTYWS5Og==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4774518},"main":"dist/cjs/index.cjs","types":"dist/types/index.d.ts","module":"dist/esm/index.mjs","browser":"dist/umd/tree-multiset-typed.min.js","engines":{"npm":">=6.14.0","node":">=12.20.0"},"exports":{".":{"node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"require":"./dist/cjs-legacy/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"}},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","scripts":{"lint":"eslint --fix \"src/**/*.{js,ts}\"","test":"jest","build":"npm run build:ecu","format":"prettier --write \"src/**/*.{js,ts}\"","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","build:umd":"tsup","build:docs":"typedoc --out docs ./src","build:node":"tsup --config tsup.node.config.js","deps:check":"dependency-cruiser src","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:publish":"npm run build && npm publish"},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"umd:main":"dist/umd/tree-multiset-typed.min.js","repository":{"url":"git+https://github.com/zrwusa/data-structure-typed.git","type":"git"},"_npmVersion":"11.11.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","dependencies":{"data-structure-typed":"^2.5.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","tsup":"^8.5.1","eslint":"^7.32.0","ts-jest":"^29.1.1","typedoc":"^0.25.1","prettier":"^3.0.3","typescript":"^4.9.5","@types/jest":"^29.5.3","@types/node":"^20.4.9","eslint-plugin-import":"^2.25.4","eslint-config-prettier":"^8.3.0","@typescript-eslint/parser":"^5.11.0","eslint-import-resolver-alias":"^1.1.2","@typescript-eslint/eslint-plugin":"^5.6.0","eslint-import-resolver-typescript":"^2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/tree-multiset-typed_2.5.3_1774909898586_0.9382823564110201","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"tree-multiset-typed","version":"2.6.0","description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","browser":"dist/umd/tree-multiset-typed.min.js","umd:main":"dist/umd/tree-multiset-typed.min.js","main":"dist/cjs/index.cjs","module":"dist/esm/index.mjs","types":"dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","node":{"import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"browser":{"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"},"./modern":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.mjs","require":"./dist/cjs/index.cjs"},"./legacy":{"types":"./dist/types/index.d.ts","import":"./dist/esm-legacy/index.mjs","require":"./dist/cjs-legacy/index.cjs"}},"sideEffects":false,"engines":{"node":">=12.20.0","npm":">=6.14.0"},"scripts":{"build":"npm run build:ecu","build:node":"tsup --config tsup.node.config.js","build:types":"rm -rf dist/types && tsc -p tsconfig.types.json","build:umd":"tsup","build:ecu":"npm run build:node && npm run build:types && npm run build:umd","lint":"eslint --fix \"src/**/*.{js,ts}\"","format":"prettier --write \"src/**/*.{js,ts}\"","test":"jest","build:docs":"typedoc --out docs ./src","deps:check":"dependency-cruiser src","build:publish":"npm run build && npm publish"},"repository":{"type":"git","url":"git+https://github.com/zrwusa/data-structure-typed.git"},"keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"homepage":"https://data-structure-typed-docs.vercel.app","devDependencies":{"@types/jest":"^29.5.3","@types/node":"^20.4.9","@typescript-eslint/eslint-plugin":"^5.6.0","@typescript-eslint/parser":"^5.11.0","eslint":"^7.32.0","eslint-config-prettier":"^8.3.0","eslint-import-resolver-alias":"^1.1.2","eslint-import-resolver-typescript":"^2.5.0","eslint-plugin-import":"^2.25.4","jest":"^29.6.2","prettier":"^3.0.3","ts-jest":"^29.1.1","tsup":"^8.5.1","typedoc":"^0.25.1","typescript":"^4.9.5"},"dependencies":{"data-structure-typed":"^2.6.0"},"gitHead":"45c0b3dedf0d3505fd78bc45ecf990e3750164c8","_id":"tree-multiset-typed@2.6.0","_nodeVersion":"22.19.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-RNc6LBirgLlrAifRbqRmCrJVMuDEA7fqMZZ6mEXe1Oe6baDSJkc10U7YBtPQTceTZpF0sMQh7AJms8NqdhNiDg==","shasum":"2cde7c979359a704417304d066d7bfb088b265cf","tarball":"https://registry.npmjs.org/tree-multiset-typed/-/tree-multiset-typed-2.6.0.tgz","fileCount":273,"unpackedSize":4863984,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA0ecGdRwe8LRvWsBy6s3o4tzWCwtwlHlaIJRw28cN33AiEA+JY3zLvGp2iEkH9hL7hnj31W7+TCOJKu4xceHzY7bww="}]},"_npmUser":{"name":"zrwusa.org","email":"zrwusa@gmail.com"},"directories":{},"maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tree-multiset-typed_2.6.0_1774947363782_0.5323056746484747"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T04:54:45.019Z","modified":"2026-03-31T08:56:04.104Z","1.19.3":"2023-08-30T06:53:51.335Z","1.19.5":"2023-08-30T10:02:22.406Z","1.19.6":"2023-08-30T16:40:37.262Z","1.19.7":"2023-08-30T16:58:45.311Z","1.19.9":"2023-08-31T14:40:07.124Z","1.20.0":"2023-09-01T04:51:15.809Z","1.21.0":"2023-09-07T14:57:22.602Z","1.21.2":"2023-09-09T09:47:12.915Z","1.21.3":"2023-09-12T03:32:58.114Z","1.21.4":"2023-09-12T04:07:16.347Z","1.3.1":"2023-09-18T14:12:52.247Z","1.3.2":"2023-09-18T18:33:47.242Z","1.3.3":"2023-09-18T18:41:37.481Z","1.31.0":"2023-09-21T15:34:26.239Z","1.32.0":"2023-09-21T17:17:46.234Z","1.32.2":"2023-09-22T03:33:17.161Z","1.32.9":"2023-09-24T13:40:44.732Z","1.33.6":"2023-09-27T04:03:30.972Z","1.33.7":"2023-10-03T06:12:40.677Z","1.33.8":"2023-10-05T05:08:09.917Z","1.34.1":"2023-10-06T13:12:59.910Z","1.34.2":"2023-10-06T13:28:18.086Z","1.34.3":"2023-10-06T13:40:09.433Z","1.34.4":"2023-10-06T14:03:55.896Z","1.34.5":"2023-10-08T10:36:25.552Z","1.34.6":"2023-10-10T02:57:55.956Z","1.34.7":"2023-10-10T09:40:48.189Z","1.34.8":"2023-10-10T12:19:19.271Z","1.34.9":"2023-10-11T11:21:35.333Z","1.35.0":"2023-10-11T14:36:52.933Z","1.35.1":"2023-10-11T15:53:45.725Z","1.40.0-rc":"2023-10-13T02:50:11.059Z","1.36.0":"2023-10-15T15:47:17.544Z","1.36.3":"2023-10-17T16:02:32.579Z","1.36.4":"2023-10-18T08:11:49.421Z","1.36.5":"2023-10-18T12:18:49.535Z","1.36.6":"2023-10-19T12:18:35.031Z","1.36.8":"2023-10-20T18:07:59.112Z","1.36.9":"2023-10-21T12:17:52.342Z","1.37.0":"2023-10-21T16:04:41.231Z","1.37.2":"2023-10-23T13:00:34.580Z","1.37.3":"2023-10-23T16:25:32.051Z","1.37.4":"2023-10-24T01:35:39.304Z","1.37.5":"2023-10-24T13:03:00.659Z","1.37.6":"2023-10-24T13:56:24.639Z","1.37.7":"2023-10-25T01:04:08.565Z","1.37.8":"2023-10-25T01:16:10.594Z","1.37.9":"2023-10-25T01:28:14.175Z","1.38.0":"2023-10-25T02:45:55.771Z","1.38.1":"2023-10-25T03:15:53.188Z","1.38.2":"2023-10-25T07:57:34.163Z","1.38.4":"2023-10-25T13:28:30.196Z","1.38.5":"2023-10-26T08:53:39.944Z","1.38.6":"2023-10-26T13:01:10.123Z","1.38.7":"2023-10-27T11:20:54.254Z","1.38.8":"2023-10-27T14:29:08.075Z","1.38.9":"2023-10-28T07:58:21.279Z","1.39.0":"2023-10-28T09:39:23.974Z","1.39.1":"2023-10-28T16:00:36.697Z","1.39.2":"2023-10-29T13:59:02.119Z","1.39.3":"2023-10-30T03:20:50.066Z","1.39.4":"2023-10-30T03:34:55.817Z","1.39.5":"2023-10-30T10:35:00.613Z","1.39.6":"2023-10-30T15:20:35.455Z","1.40.0":"2023-10-31T03:24:26.720Z","1.41.0":"2023-10-31T15:30:26.372Z","1.41.1":"2023-11-01T05:54:01.076Z","1.41.2":"2023-11-01T10:08:35.982Z","1.41.3":"2023-11-02T01:35:04.409Z","1.41.4":"2023-11-02T13:51:26.474Z","1.41.5":"2023-11-03T17:32:45.724Z","1.41.6":"2023-11-04T02:30:11.544Z","1.41.7":"2023-11-04T06:54:59.493Z","1.41.8":"2023-11-04T09:39:18.564Z","1.41.9":"2023-11-04T13:48:24.730Z","1.42.0":"2023-11-05T13:47:29.055Z","1.42.1":"2023-11-06T03:16:39.690Z","1.42.2":"2023-11-06T06:57:51.515Z","1.42.3":"2023-11-06T11:56:10.193Z","1.42.4":"2023-11-07T12:14:55.679Z","2.4.4":"2026-03-22T04:54:45.186Z","2.4.5":"2026-03-26T08:10:25.881Z","2.5.0":"2026-03-27T05:32:11.574Z","2.5.1":"2026-03-28T10:13:20.447Z","2.5.2":"2026-03-29T08:04:46.737Z","2.5.3":"2026-03-30T22:31:38.832Z","2.6.0":"2026-03-31T08:56:03.989Z"},"bugs":{"url":"https://github.com/zrwusa/data-structure-typed/issues"},"author":{"name":"Pablo Zeng zrwusa@gmail.com"},"license":"MIT","homepage":"https://data-structure-typed-docs.vercel.app","keywords":["tree multiset","treemultiset","tree-multiset","multiset","multi-set","bag","sorted multiset","sorted bag","duplicate elements","count","multiplicity","red black tree","self-balancing","binary search tree","javascript","typescript","data structure","data-structure","sorted","ordering","collection","Node.js","CommonJS","ES6","UMD","esmodule","c++ std::multiset","guava Multiset","stl"],"repository":{"type":"git","url":"git+https://github.com/zrwusa/data-structure-typed.git"},"description":"TreeMultiSet - A sorted multiset (bag) that allows duplicate elements","maintainers":[{"name":"zrwusa.org","email":"zrwusa@gmail.com"}],"readme":"![NPM](https://img.shields.io/npm/l/red-black-tree-typed)\n![GitHub top language](https://img.shields.io/github/languages/top/zrwusa/data-structure-typed)\n![npm](https://img.shields.io/npm/dw/red-black-tree-typed)\n![eslint](https://aleen42.github.io/badges/src/eslint.svg)\n![npm bundle size](https://img.shields.io/bundlephobia/minzip/red-black-tree-typed)\n![npm bundle size](https://img.shields.io/bundlephobia/min/red-black-tree-typed)\n![npm](https://img.shields.io/npm/v/red-black-tree-typed)\n\n# What\n\n## Brief\n\nThis is a standalone Red Black Tree data structure from the data-structure-typed collection. If you wish to access more data\nstructures or advanced features, you can transition to directly installing the\ncomplete [data-structure-typed](https://www.npmjs.com/package/data-structure-typed) package\n\n# How\n\n## install\n\n### npm\n\n```bash\nnpm i red-black-tree-typed --save\n```\n\n### yarn\n\n```bash\nyarn add red-black-tree-typed\n```\n\n\n### snippet\n\n#### TS\n\n```typescript\nimport {RedBlackTree} from 'data-structure-typed';\n// /* or if you prefer */ import {RedBlackTree} from 'red-black-tree-typed';\n\nconst rbTree = new RedBlackTree<number>();\n\nconst idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];\nrbTree.addMany(idsOrVals);\n\nconst node6 = rbTree.getNode(6);\nnode6 && rbTree.getHeight(node6)           // 3\nnode6 && rbTree.getDepth(node6)            // 1\nconst getNodeById = rbTree.getNodeByKey(10);\ngetNodeById?.id                             // 10\n\nconst getMinNodeByRoot = rbTree.getLeftMost();\ngetMinNodeByRoot?.id                        // 1\n\nconst node15 = rbTree.getNodeByKey(15);\nconst getMinNodeBySpecificNode = node15 && rbTree.getLeftMost(node15);\ngetMinNodeBySpecificNode?.id                // 12\n\nconst lesserSum = rbTree.lesserSum(10);\nlesserSum                                   // 45\n\nconst node11 = rbTree.getNodeByKey(11);\nnode11?.id                                  // 11\n\nconst dfs = rbTree.dfs('in');\ndfs[0].id                                   // 1 \nrbTree.perfectlyBalance();\nconst bfs = rbTree.bfs('node');\nrbTree.isPerfectlyBalanced() && bfs[0].id  // 8 \n\nrbTree.delete(11, true)[0].deleted?.id     // 11\nrbTree.isAVLBalanced();                    // true\nnode15 && rbTree.getHeight(node15)         // 2\nrbTree.delete(1, true)[0].deleted?.id      // 1\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 4\n\nrbTree.delete(4, true)[0].deleted?.id      // 4\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 4\n\nrbTree.delete(10, true)[0].deleted?.id     // 10\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(15, true)[0].deleted?.id     // 15\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(5, true)[0].deleted?.id      // 5\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(13, true)[0].deleted?.id     // 13\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(3, true)[0].deleted?.id      // 3\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(8, true)[0].deleted?.id      // 8\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(6, true)[0].deleted?.id      // 6\nrbTree.delete(6, true).length              // 0\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(7, true)[0].deleted?.id      // 7\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(9, true)[0].deleted?.id      // 9\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(14, true)[0].deleted?.id     // 14\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 1\n\nrbTree.isAVLBalanced();                    // true\nconst lastBFSIds = rbTree.BFS();\nlastBFSIds[0]                               // 12 \n\nconst lastBFSNodes = rbTree.BFS('node');\nlastBFSNodes[0].id                          // 12\n```\n\n#### JS\n\n```javascript\nconst {RedBlackTree} = require('data-structure-typed');\n// /* or if you prefer */ const {RedBlackTree} = require('red-black-tree-typed');\n\nconst rbTree = new RedBlackTree();\n\nconst idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];\nrbTree.addMany(idsOrVals, idsOrVals);\n\nconst node6 = rbTree.getNodeByKey(6);\nnode6 && rbTree.getHeight(node6)           // 3\nnode6 && rbTree.getDepth(node6)            // 1\nconst getNodeById = rbTree.get(10, 'id');\ngetNodeById?.id                             // 10\n\nconst getMinNodeByRoot = rbTree.getLeftMost();\ngetMinNodeByRoot?.id                        // 1\n\nconst node15 = rbTree.getNodeByKey(15);\nconst getMinNodeBySpecificNode = node15 && rbTree.getLeftMost(node15);\ngetMinNodeBySpecificNode?.id                // 12\n\nconst node11 = rbTree.getNodeByKey(11);\nnode11?.id                                  // 11\n\nconst dfs = rbTree.dfs('in');\ndfs[0].id                                   // 1 \nrbTree.perfectlyBalance();\nconst bfs = rbTree.bfs('node');\nrbTree.isPerfectlyBalanced() && bfs[0].id  // 8 \n\nrbTree.delete(11, true)[0].deleted?.id     // 11\nrbTree.isAVLBalanced();                    // true\nnode15 && rbTree.getHeight(node15)         // 2\nrbTree.delete(1, true)[0].deleted?.id      // 1\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 4\n\nrbTree.delete(4, true)[0].deleted?.id      // 4\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 4\n\nrbTree.delete(10, true)[0].deleted?.id     // 10\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(15, true)[0].deleted?.id     // 15\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(5, true)[0].deleted?.id      // 5\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(13, true)[0].deleted?.id     // 13\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(3, true)[0].deleted?.id      // 3\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(8, true)[0].deleted?.id      // 8\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 3\n\nrbTree.delete(6, true)[0].deleted?.id      // 6\nrbTree.delete(6, true).length              // 0\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(7, true)[0].deleted?.id      // 7\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(9, true)[0].deleted?.id      // 9\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 2\n\nrbTree.delete(14, true)[0].deleted?.id     // 14\nrbTree.isAVLBalanced();                    // true\nrbTree.getHeight()                         // 1\n\nrbTree.isAVLBalanced();                    // true\nconst lastBFSIds = rbTree.bfs();\nlastBFSIds[0]                               // 12 \n\nconst lastBFSNodes = rbTree.bfs('node');\nlastBFSNodes[0].id                          // 12\n```\n\n[//]: # (No deletion!!! Start of Example Replace Section)\n\n### basic Red-Black Tree with simple number keys\n```typescript\n // Create a simple Red-Black Tree with numeric keys\n    const tree = new RedBlackTree([5, 2, 8, 1, 9]);\n\n    tree.print();\n    //   _2___\n    //  /     \\\n    //  1    _8_\n    //      /   \\\n    //      5   9\n\n    // Verify the tree maintains sorted order\n    console.log([...tree.keys()]); // [1, 2, 5, 8, 9];\n\n    // Check size\n    console.log(tree.size); // 5;\n```\n\n### Red-Black Tree with key-value pairs for lookups\n```typescript\n interface Employee {\n      id: number;\n      name: string;\n    }\n\n    // Create tree with employee data\n    const employees = new RedBlackTree<number, Employee>([\n      [1, { id: 1, name: 'Alice' }],\n      [3, { id: 3, name: 'Charlie' }],\n      [2, { id: 2, name: 'Bob' }]\n    ]);\n\n    // Retrieve employee by ID\n    const alice = employees.get(1);\n    console.log(alice?.name); // 'Alice';\n\n    // Verify sorted order by ID\n    console.log([...employees.keys()]); // [1, 2, 3];\n```\n\n### Red-Black Tree range search for filtering\n```typescript\n interface Product {\n      name: string;\n      price: number;\n    }\n\n    const products = new RedBlackTree<number, Product>([\n      [10, { name: 'Item A', price: 10 }],\n      [25, { name: 'Item B', price: 25 }],\n      [40, { name: 'Item C', price: 40 }],\n      [50, { name: 'Item D', price: 50 }]\n    ]);\n\n    // Find products in price range [20, 45]\n    const pricesInRange = products.rangeSearch([20, 45], node => {\n      return products.get(node)?.name;\n    });\n\n    console.log(pricesInRange); // ['Item B', 'Item C'];\n```\n\n### Red-Black Tree as database index for stock market data\n```typescript\n interface StockPrice {\n      symbol: string;\n      volume: number;\n      timestamp: Date;\n    }\n\n    // Simulate real-time stock price index\n    const priceIndex = new RedBlackTree<number, StockPrice>([\n      [142.5, { symbol: 'AAPL', volume: 1000000, timestamp: new Date() }],\n      [335.2, { symbol: 'MSFT', volume: 800000, timestamp: new Date() }],\n      [3285.04, { symbol: 'AMZN', volume: 500000, timestamp: new Date() }],\n      [267.98, { symbol: 'META', volume: 750000, timestamp: new Date() }],\n      [234.57, { symbol: 'GOOGL', volume: 900000, timestamp: new Date() }]\n    ]);\n\n    // Find highest-priced stock\n    const maxPrice = priceIndex.getRightMost();\n    console.log(priceIndex.get(maxPrice)?.symbol); // 'AMZN';\n\n    // Find stocks in price range [200, 400] for portfolio balancing\n    const stocksInRange = priceIndex.rangeSearch([200, 400], node => {\n      const stock = priceIndex.get(node);\n      return {\n        symbol: stock?.symbol,\n        price: node,\n        volume: stock?.volume\n      };\n    });\n\n    console.log(stocksInRange.length); // 3;\n    console.log(stocksInRange.some((s: any) => s.symbol === 'GOOGL')); // true;\n    console.log(stocksInRange.some((s: any) => s.symbol === 'META')); // true;\n    console.log(stocksInRange.some((s: any) => s.symbol === 'MSFT')); // true;\n```\n\n[//]: # (No deletion!!! End of Example Replace Section)\n\n\n\n## API docs & Examples\n\n[API Docs](https://data-structure-typed-docs.vercel.app)\n\n[Live Examples](https://vivid-algorithm.vercel.app)\n\n<a href=\"https://github.com/zrwusa/vivid-algorithm\" target=\"_blank\">Examples Repository</a>\n\n## Data Structures\n\n<table>\n<thead>\n<tr>\n<th>Data Structure</th>\n<th>Unit Test</th>\n<th>Performance Test</th>\n<th>API Docs</th>\n</tr>\n</thead>\n<tbody>\n\n<tr>\n<td>Red Black Tree</td>\n<td><img src=\"https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg\" alt=\"\"></td>\n<td><img src=\"https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg\" alt=\"\"></td>\n<td><a href=\"https://data-structure-typed-docs.vercel.app/classes/RedBlackTree.html\"><span>RedBlackTree</span></a></td>\n</tr>\n\n</tbody>\n</table>\n\n## Standard library data structure comparison\n\n<table>\n  <thead>\n  <tr>\n    <th>Data Structure Typed</th>\n    <th>C++ STL</th>\n    <th>java.util</th>\n    <th>Python collections</th>\n  </tr>\n  </thead>\n  <tbody>\n\n  <tr>\n    <td>RedBlackTree&lt;K, V&gt;</td>\n    <td>map&lt;K, V&gt;</td>\n    <td>TreeMap&lt;K, V&gt;</td>\n    <td>-</td>\n  </tr>\n \n  </tbody>\n</table>\n\n## Benchmark\n\n[//]: # (No deletion!!! Start of Replace Section)\n<div class=\"json-to-html-collapse clearfix 0\">\n      <div class='collapsible level0' ><span class='json-to-html-label'>rb-tree</span></div>\n      <div class=\"content\"><table style=\"display: table; width:100%; table-layout: fixed;\"><tr><th>test name</th><th>time taken (ms)</th><th>executions per sec</th><th>sample deviation</th></tr><tr><td>100,000 add</td><td>85.85</td><td>11.65</td><td>0.00</td></tr><tr><td>100,000 add & delete randomly</td><td>211.54</td><td>4.73</td><td>0.00</td></tr><tr><td>100,000 getNode</td><td>37.92</td><td>26.37</td><td>1.65e-4</td></tr></table></div>\n    </div>\n\n[//]: # (No deletion!!! End of Replace Section)\n\n## Built-in classic algorithms\n\n<table>\n  <thead>\n  <tr>\n    <th>Algorithm</th>\n    <th>Function Description</th>\n    <th>Iteration Type</th>\n  </tr>\n  </thead>\n  <tbody>\n  <tr>\n    <td>Binary Tree DFS</td>\n    <td>Traverse a binary tree in a depth-first manner, starting from the root node, first visiting the left subtree,\n      and then the right subtree, using recursion.\n    </td>\n    <td>Recursion + Iteration</td>\n  </tr>\n  <tr>\n    <td>Binary Tree BFS</td>\n    <td>Traverse a binary tree in a breadth-first manner, starting from the root node, visiting nodes level by level\n      from left to right.\n    </td>\n    <td>Iteration</td>\n  </tr>\n \n  <tr>\n    <td>Binary Tree Morris</td>\n    <td>Morris traversal is an in-order traversal algorithm for binary trees with O(1) space complexity. It allows tree\n      traversal without additional stack or recursion.\n    </td>\n    <td>Iteration</td>\n  </tr>\n  \n  </tbody>\n</table>\n\n## Software Engineering Design Standards\n<table>\n    <tr>\n        <th>Principle</th>\n        <th>Description</th>\n    </tr>\n    <tr>\n        <td>Practicality</td>\n        <td>Follows ES6 and ESNext standards, offering unified and considerate optional parameters, and simplifies method names.</td>\n    </tr>\n    <tr>\n        <td>Extensibility</td>\n        <td>Adheres to OOP (Object-Oriented Programming) principles, allowing inheritance for all data structures.</td>\n    </tr>\n    <tr>\n        <td>Modularization</td>\n        <td>Includes data structure modularization and independent NPM packages.</td>\n    </tr>\n    <tr>\n        <td>Efficiency</td>\n        <td>All methods provide time and space complexity, comparable to native JS performance.</td>\n    </tr>\n    <tr>\n        <td>Maintainability</td>\n        <td>Follows open-source community development standards, complete documentation, continuous integration, and adheres to TDD (Test-Driven Development) patterns.</td>\n    </tr>\n    <tr>\n        <td>Testability</td>\n        <td>Automated and customized unit testing, performance testing, and integration testing.</td>\n    </tr>\n    <tr>\n        <td>Portability</td>\n        <td>Plans for porting to Java, Python, and C++, currently achieved to 80%.</td>\n    </tr>\n    <tr>\n        <td>Reusability</td>\n        <td>Fully decoupled, minimized side effects, and adheres to OOP.</td>\n    </tr>\n    <tr>\n        <td>Security</td>\n        <td>Carefully designed security for member variables and methods. Read-write separation. Data structure software does not need to consider other security aspects.</td>\n    </tr>\n    <tr>\n        <td>Scalability</td>\n        <td>Data structure software does not involve load issues.</td>\n    </tr>\n</table>\n\n\n\n\n","readmeFilename":"README.md"}