{"_id":"@badeggg/red-black-tree","_rev":"6-c9e88a8ee9b03ef349ea976a6138823e","name":"@badeggg/red-black-tree","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@badeggg/red-black-tree","version":"1.0.0","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"e40a56b7f7e93161f47b1ee8c84b11411d9b3e68","_id":"@badeggg/red-black-tree@1.0.0","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-5ZC5jsUL8w2j4qjdjPtPf8kMaIibz19o45ysg8/wgG1NumrN3nwwBK2WE6rueodL9IpmzzB1Y+ia/m2J7hH3/A==","shasum":"a55c8b7569a6863a83c554154935bfd40e6ce922","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.0.tgz","fileCount":3,"unpackedSize":15840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpJ/TCRA9TVsSAnZWagAAhTUP/1BnhbmnpKQv2mEns8V8\n1dYHdprjkSbfU7DPxdDjQrPv1a8X4PUN2NoyB6JEyJMLiDA+/mwz64OVCM9j\ngcEcFLBpxTLdcw1TH0FtAo4KEgpsY63beRDulujYl+watDwVxBWO3a5FWYFw\nBD1cnfp+KvSwaRBx76cGU9Int8R3qNx1WXWF+QoRMCw33iy8KXursuGUjxsj\nfNelI1d0/QeEEnfwUCB+pM4SF6xwsGSDAJWKPX63SwZ2iIpwmqoKrdsMHufW\nwj+qIVqym6K+3v5d9MGJqgsW7+RpDKNN7fMAlL7jnnL41jmPfI0576vIH8T2\nlhM4uBc8frgMyjhmPWSmB3LkBiKvUvnftu6+aX9zVi1T+vxzYbBe+24yGCpQ\nSRk1B+ix3P8dgRYDh0mdjX4SaDJXisVqF9uNLpSPR8tJfHpa7L4Psg5vHBeE\n2khClPXVSezMqh5LDWAFN0t8/4mANUYMPU0aGDyjelGZbEYRvcrw7X3TPLvy\nsp7fK6Q9VbbwnbncU9MfeCYQwxRAmjaUOQDiiod4r9pfFCsCaLHmcPN9kDru\nOleuka9MIlS0zvd4CGt0TAnEcwWhP1PxenW6WHR1TSmzgUjsqe5MuKfY/raX\nZJLD9+WCMmb94s9n/I9gPNOehJ3TrS1Hd7nwcuvnKBu04/9PqNNVCyvyCtl7\ndwVZ\r\n=lfmx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDEKmaiqEmVFEADU+BASdB5FfzC2c17Desw2Z4T4YLPmAiBjBGJzeINSSUHPfg/Cx1uxP+Mv77pAddNAmch3ZKWM1g=="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.0_1638178771391_0.5025777060013579"},"_hasShrinkwrap":false},"1.0.1":{"name":"@badeggg/red-black-tree","version":"1.0.1","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"eb6eb1e743dc936aabe573f717ef5eaef75b53b5","_id":"@badeggg/red-black-tree@1.0.1","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-ns4Mqd0P4av50rvMT/FXo2+xaihYJbIAU2wPfO9iZI59f2G+0b6z8jBF9siTAHF6kTIQw2rv7ParStNuSsqPpg==","shasum":"ab3a8e315d38415efb0a89fe117bdbfb457303a3","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.1.tgz","fileCount":3,"unpackedSize":22852,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpaeDCRA9TVsSAnZWagAA3TAP/0+jAhqxMdHwsl0oOrAn\nQYxLs5DriwjBC49Yh+PncptOm056oSMu539k2oF1qfQsrd4d3nh7guTLnXOc\ny1Y4ZZ4TTo1rsAKEdSn+Ne9/zm5OZEGFV8SFz2Vvq7ujGaPlkmJWBdrgZzZw\nLOA9ZaFeY5CcUbaCe4D+EiaBU6amBBM7XJ0cNo76JWZ3fGSlSNZD0tcRb59Q\n6oJDLU5/z+BBSuY1AupqX1fs0SJl6ZhCNhSdElPRLmG/ATlqyNwE+HXWQZN9\nEeCyLQlIWghx8ZFWkISaSBqpYPUJxxmk4/YLeJEetgfk50JqUiopXaslrdkf\n123f+4axeMLXjevOnBQhplsCGC/u1EGP4D0wDGnuREdjDOYzv3fxr7ydVT1b\nqlIDZ7oK5hE/fEAccxCTl7d42DL1Pj9qMuieifPLI5l6HgCkeOf2RUZc/u5f\ni4higVcE64FyjfOMpYVIEJ6ezeeXN17T1qQnsu9k8pMEiGPK021dzadmdeby\nh3wx0fgFOcevkswpb2wuUVblp/AQiakSWFHSBT/l7iL3227aOVnJC0Lxa8FN\n+fvpAVse8fyenmp8kk6tlNR7YKrd6C5EO3JN2SGD5IA0/DXJRgaHgKXAvTmQ\nk4qWKdvS65Q/+moroXBpVMfyyJp9YofbSlGNm7BonXzGm3hjQKkjIxUunJsj\n54Gs\r\n=S0E8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNwTTrisxR6yqNCbJ2lX54zKtJm37q6j7v4cwzmip6twIgNtGb6A2ZckUJgI5Q4AudBvU+oVtgd4SqMT2d1LvbOhc="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.1_1638246275523_0.10188933833131975"},"_hasShrinkwrap":false},"1.0.2":{"name":"@badeggg/red-black-tree","version":"1.0.2","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"b35ff9f34dc7c18f3f62cf15e6e34941efd81a35","_id":"@badeggg/red-black-tree@1.0.2","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-2OvBws8yg8OIkH0Y+kISaU5I5mzBNm07ECtn3fzshmtH0xS14CfWB34M30ghaP3Re6FRr7KGer/mM1n8docRDA==","shasum":"4c2803414bfe278850c962960a2671da19411092","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.2.tgz","fileCount":3,"unpackedSize":24255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqENDCRA9TVsSAnZWagAABbsP+gOOM8XvybRJ86gb3mPT\nwoCYPqVxTNdaRQZcz2H520OWz0PPq6ta8Ru9imR5jcHhyrfrf7G1doZNKCB5\nfLTu0momIF+ROhmhK9LdeYJ6coGSspu9Ib/G3wQnRctZXtzHYBAGJRDMvR9S\ngo0ijETTmCuyIvcaMe22k50owLoLeBmFle1SMPtC/kU293xyxVAOHgnpPo6R\nkCzv0+0/n8K/CP2xJuwi2MAnXO1hwjL6tf6sjQwSmrvfnYb/dy74tHulbunG\nvhTxMRy/MXCSnksPVUuKrCmTGQqEeCAnl+Ko1GcHZY32twUuzSJzWM2/v+kV\nX+WmJQ97O/YzdyNxUB5PIAGAFZkME80MRQ0etaQjz+ygmcC/8EClh/7LBGc5\nCKBU6gCQEuHIsksfxAR1VpcrqDEaknxbT86ruwrrX3sB6Q79Pn3mJ67C8Tme\n2OSAQgwb7jUlzu2eSOG3HbX5qR/XotTQ9Q8JnFD+Pjz0yQNEsWof8jinqirh\nRglfmSAbXHZttbPuxtGg1kZsZcmXvLKEsY69vdCCdTFj7UJwh39i4CS3ewkw\nWW/Q+5Vhc3GWYJWRqQYwfpfThr4kwYd7JieLvs2xTG5d/e3wkRYhNaE3DrD/\nZhIBiXuuBY+hDcdAOUESMBMzh0hYTDr0aAipQPO4on8WXQuqkyLi18UKTHqu\njGJp\r\n=Fj78\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZQnxtbrOXNbDpVcAppY1O+fSgFAozNpDh1Z+LedWMsQIgHh+a0+y6QPOrAdVpTGdsQNm1KWpuY6oBywdnin4nIno="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.2_1638417219410_0.7716170310368444"},"_hasShrinkwrap":false},"1.0.3":{"name":"@badeggg/red-black-tree","version":"1.0.3","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"b8610c4104f0879aba0d73a6dd465aa97eba3c84","_id":"@badeggg/red-black-tree@1.0.3","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-c8I9BZPDzJk0xbaHBGo/tpW99y+eG2+V3oq64CuHTdS50fhqwhPV7Fwta4G8rPFhbM/2mzQLMMMTfVnB/WGL1Q==","shasum":"18db42a068ee9c7023fab73aa6e677dea7c9b9c4","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.3.tgz","fileCount":3,"unpackedSize":24543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh87J6CRA9TVsSAnZWagAAbjoP/izbfTnJ68lOhVT5FVfo\nNKPQZ1PUc/limwNtkIIdiqRku6XStjoTU5vO6gBxxbXKTGKKISK09l39Uz2b\ndyEP7P+oO7EmORUODhEbv08XVaZRg7ZTA+ZB+AAdd6oHiFnFI8zLIL3Ktqih\nMRljT2maEtC/F2JCBM6LSw1D1bdmRndPJx10tAWWEER4F3qadehh0lyWMWSt\nIKZRCjG/lGzwlSFmRdU0Nc41GO/uFk4wxi5k528AX1Ed8omdeM2zFUiiEo/j\n4+ECxBaqUXwR0EAwkGp0oXsWk9xM6ZkSRqmj4sMfThCcKPxoQAr9QLzxf//e\nqKHOh6OxQeGGiClxmJolHMHwv8nk85ayHGDnb+3tcpTdxgBfneq0aZsdmUJO\n1uEa8bcUm99ya/pHdAE2iNLYRpbyMHaCqz7Rs2RWT0eNX9vSTj3DuY8T49sd\n0GuyVWJ+V9rff5fk7e3ur42+sNjCwKNLgfz7mBP6mFGvR0Kx93IIoKbxBDIw\nqc2w9eYXIQVgTOhHAZ4hgdEiKCTsBRSZ9TXgt2R6go09giRfO3Vt73TOizSA\n8QsGUoLvPzZTyMwnkI6Mm+eE4w2Oxx77NHTEFEKX8HuNnNIGegxlWa/rTVpi\nLwmd447EH1lvjxBkCz0dAyDsLu3iy4BUp2OXaUy7by02kFbLkpgAq+Hs8+lN\nmana\r\n=mLb+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHdxzZCZIIusFHOqNd97dUDTzhokZ2xgXQUoOecgUkFYAiANGnSm43eQth9o3sNORCHSkKxBUSfZqvH6JVuX1wWBFQ=="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.3_1643360890369_0.6521287340927371"},"_hasShrinkwrap":false},"1.0.4":{"name":"@badeggg/red-black-tree","version":"1.0.4","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"c3a1eec7c24fdb1ba0da0625667c6315ed4332f1","_id":"@badeggg/red-black-tree@1.0.4","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-JYYAx9Z7rXDdN0sRtg95OAiKSzmN0C05zqk6YG6AK65zD8o4bAx9VpKd6L/nZTbiLuJ+p5ZKEGJVceoUjTJ5tQ==","shasum":"406b18464e20785a8fa6a1c7f5c70525556b1467","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.4.tgz","fileCount":3,"unpackedSize":24675,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9PANCRA9TVsSAnZWagAA4YEP/RqaUhAhMUqgi+gD/P9I\nXUe4JIlTm6j604+3qyk7rNQ8OpP/34e0Q52RHmz8qDihZs4NGV4vRo9OezAF\n7wRKTyk9+5Mlob21OPvhhKF9441a8zr4PvsxiNFbPht6nQCA61cKQyarZHwX\ns2UcL43eoPpzlC3ip2oOD7DSP8Q0P88Ngez4uJecDBSIVmqHGjLOAm+2xjsY\n9TbdvRBo1sTMRwsJoWJeBXj0WUfvpYAM029NB+htHWA3ProZj91zD2Q9851F\nJ9C8tvlhIq7cStw3jrnYMfYcOK6hLgdqe0Og7XVM7AND6c4Vh3v8+Gqvt6Ik\nBb0DKp1VNilM+LOPCKpwCucvrf58zGzzF/Lv8tMluPB8mXsi00lLa8gv5J71\neXVElnqBrqFbVpnKVOMPGPvURFOc2s5U7HaC6sYVuQ0QaJdfQFZ7wtvQBFqb\nwbK+GP9/mOss7E11R3S73Ej52xnhUSXe/SqJ9wHOR5iD+dX5l8xeNNqNhl6/\nyoqW0UWff6uTssLxQgDk+4hhsLZnyx8qV0tKKcKo4p6Ytj0IRK0cnC+AL1sf\nIGPQ1yP2YlyCRdv/AcHa9eo9DrVocHPIjzI94hYhcBuAuRNHswfOtbOv6fTD\n+/RrWToo0FmmHPD7XtH0sba2p1qRWLTjzLBaTTcbC/n6USZA7HR8g4P/qc/L\nW76i\r\n=xfe2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2EzsgS1c/Chzgelb5pR3mxaj8PxmPMHJBH96IAVcINAiEA7P42SS8dFQUdAljc0RoS80Mj3iyyLBMFufP3cNHX1Tw="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.4_1643442189399_0.9303381122714653"},"_hasShrinkwrap":false},"1.0.5":{"name":"@badeggg/red-black-tree","version":"1.0.5","description":"A red black tree implementation in js.","main":"RedBlackTree.js","scripts":{"prepublishOnly":"npm run test && npm run lint","test":"tap","lint":"eslint -- test/ ./RedBlackTree.js .eslintrc.js"},"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"author":{"name":"badeggg"},"license":"ISC","bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"homepage":"https://github.com/badeggg/RedBlackTree#readme","dependencies":{},"devDependencies":{"eslint":"^8.0.1","tap":"^15.0.10"},"gitHead":"335740cead2c59f4fc48591bcb91ea3c026c7387","_id":"@badeggg/red-black-tree@1.0.5","_nodeVersion":"16.13.0","_npmVersion":"8.1.0","dist":{"integrity":"sha512-ugDtteNFS/rZ2kbQG/p/CYAbEthGBmV5jURBMLwrGl192jq6jVrL/BJm3wYTrya1GZUXoyQ4WQepmMEnE2CU1w==","shasum":"4e10bdcd5722f9b2a0ab766573106e628cffe8b8","tarball":"https://registry.npmjs.org/@badeggg/red-black-tree/-/red-black-tree-1.0.5.tgz","fileCount":3,"unpackedSize":25689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9gxCCRA9TVsSAnZWagAAW84P/RYgzwYdO4ydh9/++7IT\n3WnPLNoloYKxxfz+fQI0eS/8fKZcdQ4IUTSqjcbTiXnhQ1wPIQxMgu06CM+J\n0x6g5bpzvs+quRZtmFA/nqoyFgAz9q87XePvn15WFHpj9pTkXfnmzm10lUuZ\nFizK0tMwSrdhpRi65dssEPBAuFKmw5157lPJeBEdRPTbCMMXfpvWJOzWGA1p\nEOlEAf4B7O25cBJh1tFFw1FidqurbZ7Lq1Rlfx6MQv/AIqZdAfRsVeLP/W84\nzVFI5FxX5UFVEzAZFEjlYc3ETYiGVtvWaQA1WTRuXBJO+8cOLgkzEnhEnh2R\nrTTezYyGj30nJbYKFyjaaeX99jhjeR7ZtDYZ4dDuOeNZ7LgUtC7eTcCYV1dz\nsrYpUeUCZQa4y0KKSIpmCRC01PvgltPDYlc3rv7EcBC/JHI0kFnPqy5PLCgc\nQZlNd76QqeYuaFE1+RV7eADWnNdBaOqrs1HveDVZdwJ+TJSW2idjRfgXvdK+\nw7+oQsOYbW19882ebsRUDC4rZkZDYnoWabm4KWepDgMRggR1oYW+wvNVox1o\nzVuqZ0u6kAmMIiGR3JzZw5gRR3NP5A7jrl2ngySdyAQHAlTQ/aoslrHPdgvY\nE6gJdEyPme2u0l1yztw862YXSKFdYPORtbpueBX67aTJvre/7A0k/4bdNKit\n6XD6\r\n=+U7D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmHjLARXqSafiLCak0kpSy7V2kKm87uuX6UwJvDsjeFAiBANjoNghK8aSOYZgL02DVvef0AkvDHeKJA5iRhJQHtvQ=="}]},"_npmUser":{"name":"badeggg","email":"zhaoxuxujc@163.com"},"directories":{},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/red-black-tree_1.0.5_1643514946495_0.7190144457980356"},"_hasShrinkwrap":false}},"time":{"created":"2021-11-29T09:39:31.343Z","1.0.0":"2021-11-29T09:39:31.512Z","modified":"2022-04-04T17:29:51.435Z","1.0.1":"2021-11-30T04:24:35.695Z","1.0.2":"2021-12-02T03:53:39.555Z","1.0.3":"2022-01-28T09:08:10.501Z","1.0.4":"2022-01-29T07:43:09.540Z","1.0.5":"2022-01-30T03:55:46.663Z"},"maintainers":[{"name":"badeggg","email":"zhaoxuxujc@163.com"}],"description":"A red black tree implementation in js.","homepage":"https://github.com/badeggg/RedBlackTree#readme","keywords":["red black tree","red black tree in js","rbtree","rbtree in js"],"repository":{"type":"git","url":"git+https://github.com/badeggg/RedBlackTree.git"},"author":{"name":"badeggg"},"bugs":{"url":"https://github.com/badeggg/RedBlackTree/issues"},"license":"ISC","readme":"# Red Black Tree\n[![Version npm](https://img.shields.io/npm/v/@badeggg/red-black-tree.svg?logo=npm)](https://www.npmjs.com/package/@badeggg/red-black-tree)\n[![CI test](https://github.com/badeggg/RedBlackTree/actions/workflows/ci-test.yml/badge.svg)](https://github.com/badeggg/RedBlackTree/actions)\n[![Coverage Status](https://coveralls.io/repos/github/badeggg/RedBlackTree/badge.svg)](https://coveralls.io/github/badeggg/RedBlackTree)\n\nRed black tree in javascript ---- **carefully implemented, elaborately designed api and\nwell tested**.\n\n## Table of Contents\n- [Red Black Tree](#Red-Black-Tree)\n- [Installation](#Installation)\n- [Usage example, store number contents](#usage-example-store-number-contents)\n- [Usage example, store object contents](#usage-example-store-object-contents)\n- [Apis](#Apis)\n  + [constructor(isBiggerThan, isEqual)](#constructorisbiggerthan-isequal)\n  + [count](#count)\n  + [min](#min)\n  + [max](#max)\n  + [clear()](#clear)\n  + [has(content)](#hascontent)\n  + [findEqual(content)](#findEqualcontent)\n  + [insert(content)](#insertcontent)\n  + [delete(content)](#deletecontent)\n  + [forEach(callback)](#forEachcallback)\n  + [sortedArray()](#sortedArray)\n  + [successor(content)](#successorcontent)\n  + [predecessor(content)](#predecessorcontent)\n\n## Installation\n```\n$ npm install @badeggg/red-black-tree\n```\n\n## Usage example, store number contents\n\nAn example of storing number contents in rbtree is beneficial to explain the basic concepts,\nalthough storing number contents may be not very useful.\n\n```\n// store number contents\nconst RedBlackTree = require('@badeggg/red-black-tree');\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(23);\ntree.insert(3);\ntree.insert(29);\ntree.insert(123);\nconsole.log(tree.has(3)); // print true\nconsole.log(tree.has(4)); // print false\nconsole.log(tree.successor(20)); // print 23\n```\n\n## Usage example, store object contents\n\nStoring object contents in rbtree is the most general case. Object is non-primitive type and\nyou should check [constructor](#constructorisbiggerthan-isequal) for the notice of storing\nnon-primitive type contents.\n\n```\n// store object contents\nconst RedBlackTree = require('@badeggg/red-black-tree');\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.predecessor({start: 1.5})); // print {start: 1, end: 3}\n```\n\n## Apis\n### constructor(isBiggerThan, isEqual)\n`new RedBlackTree(isBiggerThan, isEqual);`\nTwo function parameters, isBiggerThan and isEqual\nmust be supplied. RedBlackTree use these two functions to compare contents in the tree. This\nis flexible for tree usage ---- you could store non-primitive type content, object type content\nfor example in a tree.\n**Notice that if the content type is non-primitive and you want to change content properties\nin place ---- by 'in place', we mean not deleteing and inserting back, you must guarantee the\ncontent change does not impact comparison.**\n\nExample(s):\n```\n// store number contents\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(1);\ntree.insert(2);\ntree.insert(3);\n```\n```\n// store object contents\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.predecessor({start: 1.5})); // print {start: 1, end: 3}\n```\n```\n// store non-primitive contents, object for example\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\nconst obj1 = {start: 1, end: 3};\nconst obj2 = {start: 2, end: 4};\nconst obj3 = {start: 3, end: 5};\ntree.insert(obj1);\ntree.insert(obj2);\ntree.insert(obj3);\n\n// print [ { start: 1, end: 3 }, { start: 2, end: 4 }, { start: 3, end: 5 } ]\nconsole.log(tree.sortedArray());\n\n/**\n * obj2 property's changing does not impact comparison, obj2 is still bigger than obj1 and\n * smaller then obj3\n */\nobj2.start = 2.8;\nconsole.log(tree.has(obj2)); // print true\n\n// print [ { start: 1, end: 3 }, { start: 2.8, end: 4 }, { start: 3, end: 5 } ]\nconsole.log(tree.sortedArray());\n\n/**\n * obj2 property's changing do impact comparison, delete obj2 from tree, change property and\n * insert back.\n */\ntree.delete(obj2);\nconsole.log(tree.has(obj2)); // print false\nobj2.start = 8;\ntree.insert(obj2);\nconsole.log(tree.has(obj2)); // print true\n// print [ { start: 1, end: 3 }, { start: 3, end: 5 }, { start: 8, end: 4 } ]\nconsole.log(tree.sortedArray());\n```\n\n### count\nGetter, read only. Count the number of stored contents.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.count); // print 3\n```\n\n### min\nGetter, read only. The minimum stored content.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.min); // print {start: 1, end: 3}\n```\n\n### max\nGetter, read only. The maximum stored content.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.max); // print {start: 3, end: 5}\n```\n\n### clear()\nClear the tree.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(5);\ntree.insert(9);\ntree.insert(2);\ntree.insert(0);\nconsole.log(tree.count); // print 4\ntree.clear();\nconsole.log(tree.count); // print 0\n```\n\n### has(content)\nCheck if tree has the content. By 'has' we mean strictly equal `===`. Return true or false.\nThis is different from [findEqual](#findEqualContent).\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\nconst obj1 = {start: 1, end: 3};\ntree.insert(obj1);\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.has({start: 1, end: 3})); // print false\nconsole.log(tree.has(obj1)); // print true\n```\n\n### findEqual(content)\nFind the equal content if any in tree. Use `isEqual` function to check equality.\nThis is different from [has](#hasContent).\nReturn the found content or null.\nThis function would be useful when stored contents are\nnon-primitive type ---- e.g. array or object.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.findEqual({start: 1})); // print {start: 1, end: 3}\nconsole.log(tree.findEqual({start: 4})); // print null\n```\n\n### insert(content)\nInsert content to the tree. Notice that:\n- it's forbidden to insert empty content\n- it's forbidden to insert duplicate contents(`===` or `isEqual`)\n- it's forbidden to insert different type content\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\n```\n\n### delete(content)\nDelete content from the tree. Notice that the tree must has(strictly equal `===`) the content\nto delete.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\nconst obj1 = {start: 1, end: 3};\ntree.insert(obj1);\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\nconsole.log(tree.findEqual(obj1)); // print {start: 1, end: 3}\ntree.delete(obj1);\nconsole.log(tree.findEqual(obj1)); // print null\n```\n\n### forEach(callback)\nIterate the stored contents with `callback`. `callback` accept one parameter, the content.\nIteration order is **not guaranteed**. If you want an ordered iteration, check\n[sortedArray](#sortedArray).\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1.start > v2.start;\nconst isEqual = (v1, v2) => v1.start === v2.start;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert({start: 1, end: 3});\ntree.insert({start: 2, end: 4});\ntree.insert({start: 3, end: 5});\n\n/**\n * print:\n * { start: 1, end: 3 }\n * { start: 2, end: 4 }\n * { start: 3, end: 5 }\n */\ntree.forEach(console.log);\n```\n\n### sortedArray()\nReturn a sorted array of stored contents.\n**You should call this function as limited as possible.**\nCalling this function will consume O(n) time and may consume lots of memory ---- it's a\nrecursive procedure.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(5);\ntree.insert(9);\ntree.insert(2);\ntree.insert(0);\nconsole.log(tree.sortedArray()); // print [ 0, 2, 5, 9 ]\n```\n\n### successor(content)\nFind the successor of content. Return the successor or null.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(5);\ntree.insert(9);\ntree.insert(2);\ntree.insert(0);\nconsole.log(tree.successor(9)); // print null\nconsole.log(tree.successor(2)); // print 5\n```\n\n### predecessor(content)\nFind the predecessor of content. Return the predecessor or null.\n\nExample(s):\n```\nconst isBiggerThan = (v1, v2) => v1 > v2;\nconst isEqual = (v1, v2) => v1 === v2;\nconst tree = new RedBlackTree(isBiggerThan, isEqual);\ntree.insert(5);\ntree.insert(9);\ntree.insert(2);\ntree.insert(0);\nconsole.log(tree.predecessor(0)); // print null\nconsole.log(tree.predecessor(2)); // print 0\n```\n","readmeFilename":"README.md"}