java递归查询树形结构
时间: 2023-09-12 16:03:36 浏览: 109
实现树形结构的递归查询可以采用深度优先遍历算法(DFS)。具体实现可以按照以下步骤进行:
1. 定义树节点类,包括节点ID、父节点ID、节点名称等属性。
2. 定义树形结构类,包括根节点、节点列表等属性。节点列表可以使用Map集合来存储节点对象,以节点ID作为键。
3. 实现深度优先遍历算法,递归遍历树形结构。具体实现方式可以按照以下步骤进行:
a. 从根节点开始遍历,将节点加入遍历路径中。
b. 遍历当前节点的所有子节点,如果子节点在遍历路径中已存在,则说明存在环路,返回空;否则,递归遍历子节点。
c. 如果子节点遍历完成后,没有找到目标节点,则将当前节点从遍历路径中移除,回溯到上一级节点继续遍历。
4. 调用深度优先遍历算法,查询目标节点。
下面是一个简单的Java代码示例:
```java
public class TreeNode {
private String id;
private String parentId;
private String name;
// getter和setter方法省略
}
public class Tree {
private Map<String, TreeNode> nodeMap = new HashMap<String, TreeNode>();
private TreeNode root;
// 添加节点方法
public void addNode(TreeNode node) {
if (node == null) {
return;
}
if (node.getParentId() == null || node.getParentId().equals("")) {
this.root = node;
}
nodeMap.put(node.getId(), node);
}
// 根据节点ID查询节点
public TreeNode findNodeById(String id) {
TreeNode node = nodeMap.get(id);
if (node == null) {
return null;
}
List<TreeNode> path = new ArrayList<TreeNode>();
if (dfs(node, path)) {
return node;
} else {
return null;
}
}
// 深度优先遍历算法
private boolean dfs(TreeNode node, List<TreeNode> path) {
path.add(node);
if (node.getId().equals(id)) {
return true;
}
for (Map.Entry<String, TreeNode> entry : nodeMap.entrySet()) {
TreeNode child = entry.getValue();
if (child.getParentId() == null || child.getParentId().equals("")) {
continue;
}
if (child.getParentId().equals(node.getId())) {
if (path.contains(child)) {
// 存在环路,返回空
return false;
}
if (dfs(child, path)) {
return true;
}
}
}
path.remove(node);
return false;
}
}
```
其中,addNode方法用于添加节点,findNodeById方法用于根据节点ID查询节点,dfs方法是深度优先遍历算法的实现。
阅读全文