答飘渺 关于权限树的检验方法

本文介绍了一种检查权限树是否正确构建的方法,包括确保编号连续且唯一、验证节点间的关系是否符合规定,以及检测是否存在孤岛或环路等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 所有编号应该是连续的不重复的 这个很容易检查             //编号重复肯定是树出现了问题
2. 检查节点M 那么它的所有直接字节点的左右值都在规定M的之间 //权限树所唯一要求的条件
   即 
        node_m.left < node_k.left< node_k.right <node_m.right
   节点M所有接子节点的个数满足
        count = (node_m.right-node_m.left-1)/2
   //当所有以上条件满足时 他一定是先根树 其次 是连续未丢节点的树 每个节点都在规定的值范围内
 


3. 检查树是不是主根关系树.      //出现孤岛最容易发生的 必须要检查的 由于是唯一父及唯一开始根                                 // 所以只要检查是否出现孤岛就可以检验出是否出现环路
 
   定义方法:
   Set getSet(Integer id ){
    Set set=new HashSet();
  List  nodeList=    find node.id where  superior_id=id
    set.addAll( nodeList);
    for(Integer idSub: nodeList){
 set.addAll(getSet(idSub));
    }
    return set;
  }
  //查询所有节点
  Set allSet=new HashSet();
  List  nodeAllList= find node.id // 所有节点
  //除去所有和根直接相连节点
  nodeAllList.removeAll(getSet(ROOT.id));
  if(nodeAllList.size()>0){
   //所有剩下的都是没有和根没有关系的节点 是孤立点或者是循环孤立岛.
  }else{
   //树是正常的.
  }
 

当以上几条都满足 那肯定没问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值