{"_id":"@dhlx/red-black-tree","name":"@dhlx/red-black-tree","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@dhlx/red-black-tree","private":false,"version":"0.0.1","type":"module","main":"./dist/index.umd.cjs","module":"./dist/index.js","types":"./dist/lib/main.d.ts","exports":{"types":"./dist/lib/main.d.ts","import":"./dist/index.js","require":"./dist/index.umd.cjs"},"scripts":{"dev":"vite","build":"tsc && vite build","test":"ava"},"devDependencies":{"ava":"^6.1.3","prettier":"^3.3.3","typescript":"^5.4.5","vite":"^5.2.10"},"dependencies":{"vite-plugin-dts":"^4.2.2"},"repository":{"type":"github","url":"git+https://github.com/LiDengHui/red-black-tree.git"},"description":"这是一个用 TypeScript 实现的红黑树 (RBTree) 和基于红黑树的树映射 (TreeMap) 的 npm 包。该实现提供了高效的插入、删除、搜索操作，并支持键值对存储。","_id":"@dhlx/red-black-tree@0.0.1","bugs":{"url":"https://github.com/LiDengHui/red-black-tree/issues"},"homepage":"https://github.com/LiDengHui/red-black-tree#readme","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-Lug2r5Cq/q9ZgPE9STcxRjVayZgYZY1deXqbJgUGnUqVdava2FDBZaP0eMwLHpvmSGCFrzuwUJOoemOD8xGcow==","shasum":"ee473ff9e2bf9a8c037e139090f1e615f9001694","tarball":"https://registry.npmjs.org/@dhlx/red-black-tree/-/red-black-tree-0.0.1.tgz","fileCount":7,"unpackedSize":21751,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmLinjqpewPvTultcXs9pEv7JgKdIn4hrRlyUfhBDpZAIgQnZNGAsn2+zX30yYT0Q+Uti8ZmRqR0jt0TPqW81G96w="}]},"_npmUser":{"name":"lidenghui~","email":"3379489032@qq.com"},"directories":{},"maintainers":[{"name":"lidenghui~","email":"3379489032@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/red-black-tree_0.0.1_1735884560894_0.7471192748102866"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-03T06:09:20.750Z","0.0.1":"2025-01-03T06:09:21.070Z","modified":"2025-01-03T06:09:21.390Z"},"maintainers":[{"name":"lidenghui~","email":"3379489032@qq.com"}],"description":"这是一个用 TypeScript 实现的红黑树 (RBTree) 和基于红黑树的树映射 (TreeMap) 的 npm 包。该实现提供了高效的插入、删除、搜索操作，并支持键值对存储。","homepage":"https://github.com/LiDengHui/red-black-tree#readme","repository":{"type":"github","url":"git+https://github.com/LiDengHui/red-black-tree.git"},"bugs":{"url":"https://github.com/LiDengHui/red-black-tree/issues"},"readme":"# 红黑树和树映射 (RBTree 和 TreeMap)\n\n这是一个用 TypeScript 实现的红黑树 (RBTree) 和基于红黑树的树映射 (TreeMap) 的 npm 包。该实现提供了高效的插入、删除、搜索操作，并支持键值对存储。\n\n## 安装\n\n使用 npm 安装：\n\n```bash\nnpm install @dhlx/red-black-tree\n```\n\n使用 pnpm 安装：\n\n```bash\npnpm add @dhlx/red-black-tree\n```\n\n使用 yarn 安装：\n\n```bash\nyarn add @dhlx/red-black-tree\n```\n\n## 使用方法\n\n### 导入模块\n\n```typescript\nimport { RBTree, TreeMap } from '@dhlx/red-black-tree';\n```\n\n### 红黑树 (RBTree)\n\n#### 创建红黑树\n\n```typescript\nconst tree = new RBTree<number>();\n```\n\n#### 插入节点\n\n```typescript\ntree.insert(10);\ntree.insert(20);\ntree.insert(15);\n```\n\n#### 删除节点\n\n```typescript\ntree.delete(15); // 删除值为 15 的节点\ntree.deleteAll(20); // 删除所有值为 20 的节点\n```\n\n#### 查找节点\n\n```typescript\nconst foundNode = tree.find(10);\nconsole.log(foundNode ? foundNode.data : '未找到');\n```\n\n#### 遍历树\n\n```typescript\n// 中序遍历\nfor (const value of tree.inOrder()) {\n    console.log(value);\n}\n\n// 逆序遍历\nfor (const value of tree.reverseInOrder()) {\n    console.log(value);\n}\n```\n\n### 树映射 (TreeMap)\n\n#### 创建树映射\n\n```typescript\nconst map = new TreeMap<string, number>();\n```\n\n#### 设置键值对\n\n```typescript\nmap.set('a', 1);\nmap.set('b', 2);\nmap.set('c', 3);\n```\n\n#### 获取值\n\n```typescript\nconsole.log(map.get('b')); // 输出 2\n```\n\n#### 检查键是否存在\n\n```typescript\nconsole.log(map.has('a')); // 输出 true\nconsole.log(map.has('d')); // 输出 false\n```\n\n#### 删除键值对\n\n```typescript\nmap.delete('a'); // 删除键 'a'\n```\n\n#### 查找最近的键值对\n\n```typescript\nconsole.log(map.ceil('b')); // 输出 ['b', 2]（大于或等于 b 的最小键值对）\nconsole.log(map.floor('b')); // 输出 ['b', 2]（小于或等于 b 的最大键值对）\nconsole.log(map.higher('b')); // 输出 ['c', 3]（严格大于 b 的最小键值对）\nconsole.log(map.lower('b')); // 输出 undefined（严格小于 b 的最大键值对）\n```\n\n#### 遍历映射\n\n```typescript\nfor (const [key, value] of map) {\n    console.log(key, value);\n}\n\n// 反向遍历\nfor (const [key, value] of map.rkeys()) {\n    console.log(key, value);\n}\n```\n\n## API 文档\n\n### RBTree\n\n#### 方法\n\n- `insert(data: T): boolean` 插入节点。\n- `delete(data: T): boolean` 删除一个节点。\n- `deleteAll(data: T): boolean` 删除所有相同值的节点。\n- `find(data: T): RBTreeNode<T> | null` 查找节点。\n- `inOrder(): Generator<T>` 中序遍历。\n- `reverseInOrder(): Generator<T>` 逆序遍历。\n\n### TreeMap\n\n#### 方法\n\n- `set(key: K, value: V): boolean` 设置键值对。\n- `get(key: K): V | undefined` 获取键对应的值。\n- `has(key: K): boolean` 检查键是否存在。\n- `delete(key: K): boolean` 删除键值对。\n- `ceil(key: K): [K, V] | undefined` 获取大于或等于目标键的最小键值对。\n- `floor(key: K): [K, V] | undefined` 获取小于或等于目标键的最大键值对。\n- `higher(key: K): [K, V] | undefined` 获取严格大于目标键的最小键值对。\n- `lower(key: K): [K, V] | undefined` 获取严格小于目标键的最大键值对。\n- `first(): [K, V] | undefined` 获取映射中的第一个键值对。\n- `last(): [K, V] | undefined` 获取映射中的最后一个键值对。\n- `size(): number` 获取映射中的键值对数量。\n\n## 测试\n\n项目中已包含单元测试，用于验证功能的正确性。运行以下命令以执行测试：\n\n```bash\nnpm test\n```\n\n## 许可证\n\nMIT License\n","readmeFilename":"README.md"}