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。希望这篇文章对你有所帮助,祝你在编程道路上越走越远!