Java递归查询所有父节点实现流程
流程图
flowchart TD
A[开始] --> B[定义递归方法]
B --> C[判断当前节点是否是根节点]
C -- 是 --> D[返回空列表]
C -- 否 --> E[查询当前节点的父节点]
E --> F[将父节点添加到结果列表]
F --> G[递归调用方法查询父节点的父节点]
G --> E
G -- 返回结果列表 --> H[结束]
代码实现步骤
步骤 | 代码 | 注释 |
---|---|---|
1. 定义递归方法 | java public List<Node> queryParentNodes(Node node) { } |
定义一个递归方法queryParentNodes,参数为当前节点node |
2. 判断当前节点是否是根节点 | java if (node.getParent() == null) { } |
判断当前节点的父节点是否为空,如果为空则表示当前节点为根节点 |
3. 返回空列表 | java return new ArrayList<>(); |
如果当前节点是根节点,则直接返回一个空的ArrayList作为结果 |
4. 查询当前节点的父节点 | java Node parentNode = node.getParent(); |
获取当前节点的父节点 |
5. 将父节点添加到结果列表 | java List<Node> parentNodes = queryParentNodes(parentNode); parentNodes.add(parentNode); |
递归调用方法查询父节点的父节点,并将当前父节点添加到结果列表 |
6. 递归调用方法查询父节点的父节点 | java List<Node> parentNodes = queryParentNodes(parentNode); |
递归调用方法queryParentNodes查询父节点的父节点 |
7. 返回结果列表 | java return parentNodes; |
返回查询到的结果列表 |
8. 结束 | java // 结束 |
结束递归查询 |
完整代码示例
public class Node {
private String id;
private Node parent;
// 省略getter和setter方法
public Node(String id, Node parent) {
this.id = id;
this.parent = parent;
}
}
public class Main {
public static void main(String[] args) {
// 创建节点示例
Node node1 = new Node("1", null);
Node node2 = new Node("2", node1);
Node node3 = new Node("3", node2);
// 调用递归查询方法
List<Node> parentNodes = queryParentNodes(node3);
// 输出结果
for (Node parentNode : parentNodes) {
System.out.println(parentNode.getId());
}
}
public static List<Node> queryParentNodes(Node node) {
if (node.getParent() == null) {
return new ArrayList<>();
}
Node parentNode = node.getParent();
List<Node> parentNodes = queryParentNodes(parentNode);
parentNodes.add(parentNode);
return parentNodes;
}
}
上述代码中,我们创建了一个Node类表示节点,其中包含id和parent属性,用于表示节点的唯一标识和父节点。在Main类的main方法中,我们创建了一个示例节点树,并调用queryParentNodes方法查询node3节点的所有父节点。
运行代码,输出结果为:
2
1
表示查询到的所有父节点为节点2和节点1。
通过以上步骤,我们成功实现了Java递归查询所有父节点的功能。