预排序遍历算法(MPTT)
预排序遍历算法(MPTT)
算法详细:
对于所有的树的节点,都会有一个左值和一个右值,用于确定该节点的边界。
父节点的左值都会比子节点左值的小,右值都会比子节点的右值大。

-
没有父节点新增:即没有父节点新建一个节点,那么会生成一个左右值为1,2的节点。

-
有父节点新增:将当前节点左值赋值为父节点的右值,右值赋值为左节点+1。所有左值和右值比6大的都需要加上2。

-
删除没有子级的节点:所有节点的左右值大于当前节点的右值,那么都会减去2。

-
删除有子节点的节点:所有节点的左右值大于删除的顶级节点的右值,那么这些值都会减去删除节点的个数乘以2。可以发现和
删除没有子级的节点可以归并为一种,所有左右值大于顶级的,那么会减去删除节点的个数乘以2。
-
当前节点(x,y)的子孙级:所有
左值大于x,右值小于y的节点就是当前节点的子孙级。 -
当前节点(x,y)的祖先级:所有
左值小于x,右值大于y的节点就是当前节点的子孙级。 -
level字段的作用:上述方式很容易获取所有的子孙级和祖先级,但是如果只想获取一级或者两级的话就很难处理,所以添加level字段来过滤出相隔n级的子孙级和祖先级。
-
root_id的作用:当有多个树的情况,用于标识这些节点属于哪棵树。
邮箱:noamand.ding@qq.com
Gitte: https://gitee.com/noamand

浙公网安备 33010602011771号