树结构数据查询父子级

Posted chenss15060100790

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树结构数据查询父子级相关的知识,希望对你有一定的参考价值。

数据库一般会提供树形结构的数据的查询函数,但是可能需要额外的配置,偶尔会因为设计上的失误,会导致写查询语句跟吃屎一样难受,数据量不大的情况,索性全查在代码中进行组合

import java.util.*;

/**
 * @author css
 * @data 2019/6/24 10:33
 */
public class Test<T> 
    private List<Node<T>> list = new ArrayList<>();

    public class Node<T> 
        Object id;
        Object pid;
        String name;
        T t;

        Node<T> parent;
        LinkedList<Node<T>> children = new LinkedList<>();

        @Override
        public String toString() 
            return "Node" +
                    "id=" + id +
                    ", pid=" + pid +
                    ", name=" + name +
                    ", t=" + t +
                    ", children=" + children +
                    ‘‘;
        
    

    public void add(Object id, Object pid, String name, T t) 
        Node<T> node = new Node<>();
        node.id = id;
        node.pid = pid;
        node.name = name;
        node.t = t;
        list.add(node);
    

    public Node<T> toTree(Object root) 
        for (Node<T> i : list) 
            for (Node<T> j : list) 
                if (i.id.equals(j.pid)) 
                    i.children.add(j);
                    j.parent = i;
                
            
        
        for (Node<T> i : list) 
            if (root.equals(i.id)) 
                return i;
            
        
        return null;
    

    public List<T> getParent(Node<T> node) 
        Node<T> p = node.parent;
        if (p == null) 
            return null;
         else 
            List<T> list = new ArrayList<>();
            while (p != null) 
                list.add(p.t);
                p = p.parent;
            
            return list;
        
    

    public List<T> getChildren(Node<T> node) 
        LinkedList<Node<T>> c = new LinkedList<>(node.children);
        if (c.isEmpty()) 
            return null;
         else 
            List<T> list = new ArrayList<>(c.size());
            Node<T> e;
            while (!c.isEmpty()) 
                e = c.pollFirst();
                list.add(e.t);
                if (!e.children.isEmpty()) 
                    c.addAll(e.children);
                
            
            return list;
        
    

    public static void main(String[] args) 
        Test<String> t = new Test<>();
        t.add(1, null, "1000", "node1");
        t.add(2, 1, "1001", "node2");
        t.add(3, 2, "1002", "node3");
        t.add(4, 2, "1003", "node4");
        Test.Node n = t.toTree(1);
        System.out.println(t.getChildren(n));
    

 

以上是关于树结构数据查询父子级的主要内容,如果未能解决你的问题,请参考以下文章

修改数据结构记录,将同级数据改成父子集数据

js中将有层级关系的一维数据转换为父子级关系的二维数据菜单权限三级层级数据实现(树形结构数据)

js中将有层级关系的一维数据转换为父子级关系的二维数据菜单权限三级层级数据实现(树形结构数据)

JAVA中生成菜单树结构常用方法总结

JAVA中生成菜单树结构常用方法总结

JAVA中生成菜单树结构常用方法总结