Java はツリーの作成を実装します

#java はツリーの作成を実装します
##以下は、再帰を使用してツリーを作成し、ツリーのレベルに従ってルートに至るまでのすべての上位レベルのノード名を検索するインターフェースを提供する Java 実装です。リスト配列に存在するレベル:

public class TreeNode {
    
    
    private String name;
    private int level;
    private List<TreeNode> children;

    // 构造方法、getters 和 setters 略
}

public class TreeUtils {
    
    
    /**
     * 递归创建树
     *
     * @param nodes 待创建树的节点列表
     * @param level 当前节点的层数
     * @return 根节点
     */
    public static TreeNode createTree(List<TreeNode> nodes, int level) {
    
    
        TreeNode root = new TreeNode();
        root.setLevel(level);
        root.setName("Root"); // 根节点的名字可以自定义

        // 如果没有节点了,直接返回根节点
        if (nodes == null || nodes.isEmpty()) {
    
    
            return root;
        }

        List<TreeNode> children = new ArrayList<>();
        for (TreeNode node : nodes) {
    
    
            // 如果节点的层数等于当前层数,把它作为当前节点的子节点
            if (node.getLevel() == level) {
    
    
                children.add(node);
            }
        }

        // 递归创建子树
        for (TreeNode child : children) {
    
    
            TreeNode childNode = createTree(nodes, level + 1);
            child.getChildren().add(childNode);
        }

        root.setChildren(children);
        return root;
    }

    /**
     * 根据树的等级查找它所有上一级的节点 name,一直到根级
     *
     * @param node  要查找的节点
     * @param names 用于存放节点名称的 list
     */
    public static void findNodeNames(TreeNode node, List<String> names) {
    
    
        if (node == null) {
    
    
            return;
        }

        names.add(0, node.getName()); // 把节点名加入到 list 的最前面

        if (node.getLevel() == 0) {
    
     // 如果到了根节点,直接返回
            return;
        }

        // 递归查找上一级节点
        for (TreeNode parent : node.getParents()) {
    
    
            findNodeNames(parent, names);
        }
    }
}

おすすめ

転載: blog.csdn.net/weixin_41902931/article/details/129803967
おすすめ