Java递归删除树形结构父节点

做淘淘商城项目,树形结构递归删除父节点时,出现两个bug
如图
Java递归删除树形结构父节点_第1张图片
1.当删除子节点后其父节点没有其他子节点时,应将其父节点标志设置为false,但是设置完后发现其依然是父节点图标,后来发现是虽然代码改了设置,但并未保存到数据库。
2.递归删除父节点及其子节点时,发现老是删不干净,后来发现代码错误,原来是

if(children.size() > 0){
            for (TbContentCategory tbContentCategory : children) {
                deleteContentCategoryById(tbContentCategory.getId());
            }
}else{
...
}

结构,递归删除其子节点后,无须else,都要继续删除其父节点并判断是否设置父节点图标改变。
正确的是

public TaotaoResult deleteContentCategoryById(long id) {
        TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
        TbContentCategoryExample example = new TbContentCategoryExample();
        Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(id);
        List children = new ArrayList<>();
        children = contentCategoryMapper.selectByExample(example);
        if(children.size() > 0){
            for (TbContentCategory tbContentCategory : children) {
                deleteContentCategoryById(tbContentCategory.getId());
            }
        }

        contentCategoryMapper.deleteByPrimaryKey(id);

        TbContentCategory parent = contentCategoryMapper.selectByPrimaryKey(contentCategory.getParentId());
        TbContentCategoryExample example2 = new TbContentCategoryExample();
        Criteria criteria2 = example2.createCriteria();
        criteria2.andParentIdEqualTo(parent.getId());
        List list = new ArrayList<>();
        list = contentCategoryMapper.selectByExample(example2);
        if(list.size() == 0){
            parent.setIsParent(false);
            contentCategoryMapper.updateByPrimaryKey(parent);
        }
        return TaotaoResult.ok(contentCategory);
    }

你可能感兴趣的:(递归)