Java树形结构中获取当前层级的所有上级ID
作为一名刚入行的开发者,你可能会遇到需要处理树形结构数据的场景。在Java中,这通常涉及到使用递归或者队列来实现。本文将向你介绍如何获取树形结构中当前层级的所有上级ID。
流程概述
首先,让我们通过一个简单的流程来理解整个操作:
步骤 | 描述 |
---|---|
1 | 定义树节点类 |
2 | 构建树形结构 |
3 | 遍历树形结构 |
4 | 获取当前层级的所有上级ID |
定义树节点类
在Java中,我们首先需要定义一个树节点类,通常包含节点的ID、父节点ID以及子节点列表。
public class TreeNode {
private int id;
private int parentId;
private List<TreeNode> children;
public TreeNode(int id, int parentId) {
this.id = id;
this.parentId = parentId;
this.children = new ArrayList<>();
}
public void addChild(TreeNode child) {
children.add(child);
}
public int getId() {
return id;
}
public int getParentId() {
return parentId;
}
public List<TreeNode> getChildren() {
return children;
}
}
构建树形结构
接下来,我们需要构建一个树形结构。假设我们有以下树形结构:
1
/ \
2 3
/ \
4 5
我们可以通过以下代码构建这个树形结构:
TreeNode root = new TreeNode(1, 0);
TreeNode node2 = new TreeNode(2, 1);
TreeNode node3 = new TreeNode(3, 1);
TreeNode node4 = new TreeNode(4, 2);
TreeNode node5 = new TreeNode(5, 2);
root.addChild(node2);
root.addChild(node3);
node2.addChild(node4);
node2.addChild(node5);
遍历树形结构
为了获取当前层级的所有上级ID,我们可以使用深度优先搜索(DFS)或者广度优先搜索(BFS)。这里我们使用DFS。
public void dfs(TreeNode node, int currentLevel, int targetLevel, List<Integer> ancestors) {
if (node == null) {
return;
}
if (currentLevel == targetLevel) {
ancestors.add(node.getParentId());
return;
}
dfs(node.children.get(0), currentLevel + 1, targetLevel, ancestors);
for (int i = 1; i < node.children.size(); i++) {
dfs(node.children.get(i), currentLevel + 1, targetLevel, ancestors);
}
}
获取当前层级的所有上级ID
最后,我们可以通过调用dfs
方法来获取当前层级的所有上级ID。
List<Integer> ancestors = new ArrayList<>();
dfs(root, 0, 2, ancestors); // 假设我们想要获取层级为2的所有上级ID
System.out.println("Ancestors of level 2: " + ancestors);
状态图
以下是树形结构的简单状态图:
stateDiagram-v2
root --> node2
root --> node3
node2 --> node4
node2 --> node5
结语
通过上述步骤,你可以轻松地在Java中实现获取树形结构中当前层级的所有上级ID。希望这篇文章对你有所帮助,祝你在编程道路上越走越远!