目标是删除树形结构,树形结构是在数据库内存储,如图所示。id表示一个点的id,fid表示一个节点的父id,我个人认为这个结构有点问题,如果不标出来根节点,怎么辉石呢?
用的springboot+mybatisplus,mp是真的好用。。。
思路如下,目的是删除树结构的任意节点,如果删除的节点是叶子节点,那么直接删除就好,如果删除的是中间节点,就要递归删除掉这个中间节点下面的所有节点,原子操作即为当这个节点没有子节点时,则删除该节点,并试图删除掉这个节点的父节点。
先看代码头,
有一个问题,每次试图删除掉父节点,当我删除节点2时,节点2以下的其他子节点删除并无问题,但是当递归回到节点2时,就会出现试图删除掉节点2的父节点的情况,所以需要预先在函数体外定义变量存储节点2,在函数体外定义一个rootID存储最初输入的节点id,函数进行到最初输入的节点时,我们不希望在执行删除父节点的行为,做一个判断即可。即id==rootID时,不执行删除父节点的操作。
图中list存储的是父id,通过搜索表中是否存在fid(父id)=