一棵广度和深度都未知的树,存储于数据库的表中,节点存储顺序随机,表结构如下

一棵广度和深度都未知的树,存储于数据库的表中,节点存储顺序随机,表结构如下

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;
    }


}
复制代码

需要改进,有好的建议欢迎提示

posted @   苦逼的1024  阅读(229)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示