英文:
Update tree in root to child manner on node click with recursion
问题
我正在使用Angular + Spring Boot项目,其中我必须以分层方式显示数据的树状结构。
这是我的TreeNode类用于创建节点。
我们使用mat-tree创建树,目前整个树一次性创建,因此加载树需要很长时间。
所以我必须更改生成树的方式如下:
树示例:
- 根
- 子节点1
- 子子节点1
- a
- a1
- a2
- b
- 子子节点2
- c
- d
- 子节点2
- 子子节点3
- f
- j
- 子子节点4
首先需要加载树的第一层:
- 根
- 子节点1
- 子节点2
然后在点击子节点1后,我想在树中加载其子节点。节点的数据已被正确获取,但我需要维护一个全局变量来修改它,以便在执行节点点击时更新树。从Angular到Java发出加载树的请求,因此我需要维护一个树以进行更新。
我的问题是,随着树的深入,我需要编写许多循环。因此,我编写了一个递归函数,但它不能正常工作:
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;
}
这个方法不能正常工作。我想知道在哪里精确地放置子节点。该方法只适用于一级,但随着树的深入,它不起作用。我可以通过为每个级别编写循环来解决,但这会增加代码行数,并且许多时候级别也是未知的。
如何在根到子节点的方式中更新树,而不使用大量的代码,而是使用递归?
英文:
I am working with Angular+ spring boot project, in which I have to show tree structure of my data as the data in in hierarchical manner.
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<>();
}
This is my TreeNode class for creating a node.
We have used mat-tree to create tree, for now the whole tree is created at once, so it takes long time to load the tree.
So I have to change the manner to generate tree as :
Tree example :
- root
- child1
- subchild1
- a
- a1
- a2
- b
- a
- subchild2
- c
- d
- subchild1
- Child2
- subchild3
- f
- j
- subchild4
- subchild3
- child1
First need to load first level of tree :
- root
- child1
- child2
Then on click of the child1, I want to load its children nodes in the tree. The data of the nodes is fetched correctly, but I need to maintain a global variable for the tree to modify it as click on the node is performed. The request to load the tree come from Angular to Java so I need to maintain a tree to update it.
My issue is that I need to write many for loops as the tree get deeper. So I have written a recursive function, but it not working properly :
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;
}
This method not working properly. I want to know the exact position to put child on it. The method wok fine for one level only, but as the tree grow deeper this is not working. I can work by writing for loop for each level, but this will increase lines of code and many time the level also will be unknown.
How can I update the tree in root to child manner without number of code by using recursion?
答案1
得分: 0
将代码修改为类似以下内容:
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;
}
英文:
Change to something like:
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;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论