实现无限层级的树形结构可以采用递归的方式。以下是Java和JavaScript各一种实现方法。
Java实现方法
定义树节点类
首先需要定义一个树节点类,用于表示树中的节点。
public class TreeNode {
private String id;
private String name;
private String parentId;
private List<TreeNode> children;
// 构造函数
public TreeNode(String id, String name, String parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.children = new ArrayList<>();
}
// getter和setter方法
}
在这个类中,需要定义节点的id、名称、父节点id和子节点列表。
构建树形结构
有了节点类之后,就可以通过递归构建树形结构了。
public static List<TreeNode> buildTree(List<TreeNode> nodeList, String parentId) {
List<TreeNode> treeList = new ArrayList<>();
for (TreeNode node : nodeList) {
if (parentId.equals(node.getParentId())) {
List<TreeNode> children = buildTree(nodeList, node.getId());
node.setChildren(children);
treeList.add(node);
}
}
return treeList;
}
这个方法接收一个节点列表和一个指定节点id,返回以该节点为根节点的树形结构。它首先遍历节点列表,找到所有父节点id等于指定节点id的节点,然后递归调用自身,获取当前节点的子节点列表,设置到当前节点中,并将当前节点添加到父节点的子节点列表中,最后返回以该节点为根节点的树形结构。
示例
以下是一个示例,创建了一个包含多个节点的节点列表,然后构建以根节点为id的树形结构。
public static void main(String[] args) {
List<TreeNode> nodeList = new ArrayList<>();
nodeList.add(new TreeNode("1", "节点1", "0"));
nodeList.add(new TreeNode("2", "节点2", "0"));
nodeList.add(new TreeNode("3", "节点3", "1"));
nodeList.add(new TreeNode("4", "节点4", "1"));
nodeList.add(new TreeNode("5", "节点5", "2"));
nodeList.add(new TreeNode("6", "节点6", "3"));
nodeList.add(new TreeNode("7", "节点7", "4"));
nodeList.add(new TreeNode("8", "节点8", "4"));
List<TreeNode> treeList = buildTree(nodeList, "0");
System.out.println(treeList);
}
输出结果:
[TreeNode{id='1', name='节点1', parentId='0', children=[TreeNode{id='3', name='节点3', parentId='1', children=[TreeNode{id='6', name='节点6', parentId='3', children=[]}]}, TreeNode{id='4', name='节点4', parentId='1', children=[TreeNode{id='7', name='节点7', parentId='4', children=[]}, TreeNode{id='8', name='节点8', parentId='4', children=[]}]}]}, TreeNode{id='2', name='节点2', parentId='0', children=[TreeNode{id='5', name='节点5', parentId='2', children=[]}]}]
JavaScript实现方法
定义树节点类
与Java实现类似,需要先定义一个树节点类。
class TreeNode {
constructor(id, name, parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.children = [];
}
}
构建树形结构
function buildTree(nodeList, parentId) {
let treeList = [];
for (let node of nodeList) {
if (node.parentId === parentId) {
let children = buildTree(nodeList, node.id);
node.children = children;
treeList.push(node);
}
}
return treeList;
}
该函数与Java实现类似,接收一个节点列表和一个指定节点id,返回以该节点为根节点的树形结构。它先遍历节点列表,找到所有父节点id等于指定节点id的节点,然后递归调用自身,获取当前节点的子节点列表,设置到当前节点中,并将当前节点添加到父节点的子节点列表中,最后返回以该节点为根节点的树形结构。
示例
以下是一个示例,创建了一个包含多个节点的节点列表,然后构建以根节点为id的树形结构。
let nodeList = [
new TreeNode("1", "节点1", "0"),
new TreeNode("2", "节点2", "0"),
new TreeNode("3", "节点3", "1"),
new TreeNode("4", "节点4", "1"),
new TreeNode("5", "节点5", "2"),
new TreeNode("6", "节点6", "3"),
new TreeNode("7", "节点7", "4"),
new TreeNode("8", "节点8", "4")
];
let treeList = buildTree(nodeList, "0");
console.log(treeList);
输出结果与Java实现相同。
综上所述,实现无限层级的树形结构可以通过递归的方式进行。在Java和JavaScript中都是类似的实现方式。需要定义一个节点类,然后通过一个递归函数构建树形结构,并返回以指定节点id为根节点的树形结构。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java、js中实现无限层级的树形结构方法(类似递归) - Python技术站