一棵广度和深度都未知的树,存储于数据库的表中,节点存储顺序随机,表结构如下
一棵广度和深度都未知的树,存储于数据库的表中,节点存储顺序随机,表结构如下
id | 该节点的ID(自增主键) |
Parentld | 该节点的父节点ID |
Name | 节点名称 |
该表已经从数据库读取完成并加载到内存,并存储在变量NodeList中。请实现删除方法:
Delete(int TargetlD):实现从NodeList中删除Id为Targetld 的节点及其所有子节点。
使用java实现:
public class DeleteNode { public static void main(String[] args) { Node node = new Node(1, 1, "aa"); Node node1 = new Node(2, 3, "bb"); Node node2 = new Node(3, 2, "cc"); Node node3 = new Node(4, 3, "dd"); Node node4 = new Node(5, 2, "ee"); List<Node> list = new ArrayList<>(Arrays.asList(node, node1, node2, node3, node4)); List<Node> delete = delete(2, list); delete.forEach(item -> System.out.println(item.toString())); } //第一种 private static List<Node> delete(int targetId, List<Node> nodeList) { List<Node> list = new ArrayList<>(); Stream<Node> nodeStream = nodeList.stream().filter(node -> { return (targetId == node.getId() || targetId == node.getParentId()); }); nodeList.removeAll(nodeStream.collect(Collectors.toList())); list.stream().forEach(node -> { delete(node.getId(), nodeList); }); return nodeList; } //第二种 private static List<Node> delete1(int targetId, List<Node> nodeList) { List<Node> list = new ArrayList<>(); nodeList.stream().forEach(node -> { if (targetId == node.getId() || targetId == node.getParentId()) { list.add(node); } }); nodeList.removeAll(list); list.stream().forEach(node -> { delete(node.getId(), nodeList); }); return nodeList; } }
需要改进,有好的建议欢迎提示
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下