繁体   English   中英

使用递归在节点单击时以根为子方式更新树

[英]Update tree in root to child manner on node click with recursion

我正在使用 Angular+ spring boot 项目,在该项目中,我必须以分层方式将数据的树结构显示为数据。

public class TreeNode {

    private long nodeId;
    private String nodePath;
    private String hierarchyLevel;
    private String nodeFullPath;
    private Integer pageNumber;
    private String label;
    private Long parentNodeId;
    private List<OutlineNode> children = new LinkedList<>();

}

这是我用于创建节点的 TreeNode 类。 我们已经使用 mat-tree 创建树,现在整个树是一次创建的,因此加载树需要很长时间。 所以我必须改变生成树的方式:

树示例:

    • 孩子1
      • 子子1
        • 一种
          • a1
          • a2
      • 子子2
        • C
        • d
    • 孩子2
      • 子子3
        • F
        • j
      • 子子4

首先需要加载第一级树:

    • 孩子1
    • 孩子2

然后单击 child1,我想在树中加载它的子节点。 节点的数据被正确获取,但我需要为树维护一个全局变量,以便在单击节点时对其进行修改。 加载树的请求来自 Angular 到 Java,所以我需要维护一棵树来更新它。

我的问题是,随着树的深入,我需要编写许多 for 循环。 所以我写了一个递归函数,但它不能正常工作:

private TreeNode addChildren(TreeNode treeNodeOld, Long id) {
            for (TreeNode treeNode : treeNodeOld.getChildren()) {
                addChildren(treeNode, id);
                if (treeNode.getNodeId() == id) {
                    return treeNode;
                }
                addChildren(treeNode, id);
            }
            return null;
        } 

这种方法不能正常工作。 我想知道把孩子放在上面的确切位置。 该方法仅适用于一个级别,但随着树变深,这不起作用。 我可以通过为每个级别编写 for 循环来工作,但这会增加代码行数并且很多时候级别也将是未知的。

如何使用递归在没有代码数量的情况下以根到子的方式更新树?

更改为类似:

private TreeNode addChildren(TreeNode treeNodeOld, Long id) {
            for (TreeNode treeNode : treeNodeOld.getChildren()) {
                if (treeNode.getNodeId() == id) {
                    return treeNode;
                }
                TreeNode found = addChildren(treeNode, id);
                if (found != null) {
                    return found;
                }
            }
            return null;
        } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM