二叉树结构菜单 - 操作

二叉树结构菜单
  • 添加:
参数: p_id,  p_lft,  p_rgt

(1) p_id > 0
  新增数据 lft = #{p_rgt},  rgt = #{p_rgt} + 1 ; 返回 id ;
  1. 所有 lft > #{p_rgt} 的数据,lft + 2 ;
  2. 所有 rgt >= #{p_rgt} and id != #{id} 的数据,rgt + 2 ;

(2) p_id == 0
  查询当前最大rgt:rgt
  添加数据:lft = #{rgt} + 1,  rgt = #{rgt} + 2
  • 删除:
参数:删除行的 pid, lft, rgt 

删除数据 lft >= #{lft} , rgt <= #{rgt} ;
1. 所有 lft > #{lft} 的数据,lft - {#{rgt} - #{lft} + 1} ,
2. 所有 rgt > #{rgt} 的数据,rgt - {#{rgt} - #{lft} + 1} ;    
  • 同级上移:
参数:当前级的 lft , rgt 

获取到同级上一个: where rgt = #{lft} - 1 ; 得到 pre_lft , pre_rgt ;
1. 所有 lft >= #{lft}  and rgt <= #{rgt} 的数据,获取到 id_List ;
            lft - ( #{pre_rgt} - #{pre_lft} + 1) 
            rgt - ( #{pre_rgt} - #{pre_lft} + 1)
2. 所有 lft >= #{pre_lft}  and rgt <= #{pre_rgt} 的数据,获取到 id_List ;
            lft + ( #{rgt} - #{lft} + 1) 
            rgt + ( #{rgt} - #{lft} + 1)
  • 同级下移:
参数:当前级的 lft , rgt 

获取到同级下一个: where lft = #{rgt} + 1 ; 得到 next_lft , next_rgt ;
1. 所有 lft >= #{lft}  and rgt <= #{rgt} 的数据,获取到 id_List ;
            lft + ( #{next_rgt} - #{next_lft} + 1) 
            rgt + ( #{next_rgt} - #{next_lft} + 1)
2. 所有 lft >= #{next_lft}  and rgt <= #{next_rgt} 的数据,获取到 id_List ;
            lft - ( #{rgt} - #{lft} + 1) 
            rgt - ( #{rgt} - #{lft} + 1)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树。算法的性能取决于树的形状,而树的形状取决于...
    sunhaiyu阅读 12,263评论 4 32
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 14,589评论 0 25
  • 原文链接 B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(...
    非典型程序员阅读 4,900评论 0 3
  • B树 1.前言: 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balan...
    铁甲依然在_978f阅读 5,299评论 0 4
  • B-树,就是B树,B树的原英文名是B-tree,所以很多翻译为B-树,就会很多人误以为B-树是一种树、B树是另外一...
    xx1994阅读 23,953评论 1 17

友情链接更多精彩内容