如下图,如何删除树节点及所有子节点,子节点可能还有子节点,如何递归?
如果删除渭南就直接删除,删除西安就必须删除西安,钟楼,大雁塔|---陕西
| |
| |---渭南
| |
| |--- 西安
| |
| |--钟楼
| |
| |--大雁塔
|
|---云南
| |
| |---丽江 数据库表示
一个parent字段表示这个节点的父节点
id parentid
陕西 0
渭南 陕西
西安 陕西
钟楼 西安
大雁塔 西安
云南 0
丽江 云南
如果删除渭南就直接删除,删除西安就必须删除西安,钟楼,大雁塔|---陕西
| |
| |---渭南
| |
| |--- 西安
| |
| |--钟楼
| |
| |--大雁塔
|
|---云南
| |
| |---丽江 数据库表示
一个parent字段表示这个节点的父节点
id parentid
陕西 0
渭南 陕西
西安 陕西
钟楼 西安
大雁塔 西安
云南 0
丽江 云南
{
if(!node.hasSonNodes)
{
session.delete(node);
}
else
{
Node[] SonNodes=node.getSonNodes();
for(int i=0,i<SonNodes.length,i++)
{
deleteNode(SonNodes[i]);
}
}
}
public void deleteNode(Node node)
{
session.delete(node); //数据库中删除当前node这个节点
if(node.hasSonNodes) //当前节点是否有子节点
{
Node[] SonNodes=node.getSonNodes(); //获得当前node的所有子节点
for(int i=0;<SonNodes.length;i++)
{
deleteNode(SonNodes[i]);
}
}
}
{
ActivityService as =(ActivityService)getActivityService() ;
public ActionForward actionExecute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws Exception
{
long activityId = Long.parseLong(request.getParameter("flag"));
List lastList = new ArrayList();
lastList= getId(activityId);
lastList.add(new Long(activityId)); // last add the first point
for(int i=0;i<lastList.size();i++)
{
as.deleteActivity(((Long) lastList.get(i)).longValue());
}
return actionMapping.findForward("sccuess");
}
private List getId(long activityId) throws Exception
{
List idList = new ArrayList();
idList=as.selectId(activityId);
//find if has next point
//(select activity_id from t_activity where parent_id =activityId)
if(idList != null)
{
for(int i =0;i<idList.size();i++)
{
idList.add(getId(((Long) idList.get(i)).longValue()));
}
return idList;
}
else
{
return idList;
}
}
}
为什么不分开来写呢?这样很乱的
不过你这样子性能会降低一倍,因为多了一次循环删除
为什么不在找到的时候就删除呢?而要保存下来
还有看看这里idList.add(getId(((Long) idList.get(i)).longValue有没有错了
没有的话应该就差不多
{
List idList = new ArrayList();
idList=as.selectId(activityId);
as.deleteActivity(activityId);
if(idList != null)
{
for(long i =0;i<idList.size();i++)
{
deleteById(i);
}
}
}