# flextree **Repository Path**: zhangfisher/flextree ## Basic Information - **Project Name**: flextree - **Description**: 基于左右值算法的数据库树存取库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-06-19 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [官网](https://zhangfisher.github.io/flextree/) | [English](./readme.md) `FlexTree`是`Nodejs`下一个基于左右值算法的树结构库,它提供了一种简单的方式来存储和操作树形结构数据。 `FlexTree`提供了简单而丰富的`API`让你可以轻松的操作树,如增删改查、遍历、移动、查询等。 **主要特性:** - 基于左右值算法,高效的树结构存储和访问 - 简单易用的`API` - 丰富的树操作,如增删改查、遍历、移动、查询等 - 采用`TypeScript`开发,提供完整友好的类型定义 - 支持任意数据库存储,如`SQLite`、`MySQL`、`PostgreSQL`等 - `95%+`的测试覆盖率,保证代码质量 - 适用`Node.js`环境 # 了解树模型 在开发`Nodejs`应用时,当需要在数据库中存储树时,常见的存储结构有以下几种: - 邻接列表结构 - 路径枚举结构 - 嵌套树结构 - 闭包表结构 以上算法各有优缺点,应该根据实际的应用场景选择合适的算法。 `嵌套树模型(Nested Set Model)`也被称为`左右值`模型,它是一种用于存储树形结构数据的方法,通过两个字段(通常被称为 `lft` 和 `rgt`)来表示节点在树中的位置。 在嵌套树模型中,每个节点的`lft`值都小于其所有子节点的`lft`值,`rgt`值都大于其所有子节点的 `rgt` 值。这样,我们可以通过一个简单的查询来获取一个节点的所有后代,只需要查找`lft` 和 `rgt` 值在这个范围内的所有节点即可。 嵌套树模型的左右值分布方式是通过`深度优先遍历(Depth-First Search)`来确定的。在遍历过程中,每当进入一个节点时,就分配一个 `lft` 值,每当离开一个节点时,就分配一个 `rgt` 值。这样,每个节点的 `lft` 和 `rgt` 值就形成了一个区间,这个区间内的所有值都对应该节点的子节点。 ![](./docs/intro/lr.png) 例如,下面是一个嵌套树模型的例子: | id | leftValue | rightValue | name | |----|-----|-----|------| | 1 | 1 | 14 | root | | 2 | 2 | 9 | A | | 3 | 10 | 11 | B | | 4 | 12 | 13 | C | | 5 | 3 | 4 | A-1 | | 6 | 5 | 6 | A-2 | | 7 | 7 | 8 | A-3 |