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{
//树是正常的.
}
当以上几条都满足 那肯定没问题.