[英]Finding the path from the root node to a specified node in a tree using recursion
[英]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 创建树,现在整个树是一次创建的,因此加载树需要很长时间。 所以我必须改变生成树的方式:
树示例:
首先需要加载第一级树:
然后单击 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.