java递归树形结构查询
时间: 2023-10-27 12:28:28 浏览: 134
对于一个树形结构,我们可以使用递归算法来进行查询。假设我们有如下的树形结构:
```
A
├─B
│ ├─D
│ └─E
├─C
│ ├─F
│ └─G
└─H
└─I
```
我们可以定义一个递归函数,来查询某个节点及其子节点的信息:
```java
public void search(TreeNode node) {
// 处理当前节点
System.out.println(node);
// 递归处理子节点
for (TreeNode child : node.getChildren()) {
search(child);
}
}
```
其中,`TreeNode` 表示树节点的数据结构,`getChildren()` 方法返回当前节点的子节点列表。我们可以从根节点开始调用 `search` 函数,就可以递归地遍历整个树形结构。
例如,要查询节点 `C` 及其子节点的信息,可以这样调用:
```java
TreeNode rootNode = ...; // 根节点
TreeNode cNode = ...; // 要查询的节点
search(cNode);
```
这样就能输出如下结果:
```
C
F
G
```
相关问题
java版本 递归树形结构
Java 版本的递归树形结构可以使用递归函数来实现,每个节点都可以看作是一个子树,递归函数可以遍历整个树形结构。在 Java 中,可以使用类来表示树形结构,每个节点可以看作是一个对象,包含节点的值和子节点的引用。递归函数可以通过访问子节点的引用来遍历整个树形结构。
java递归查询树形结构
实现树形结构的递归查询可以采用深度优先遍历算法(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方法是深度优先遍历算法的实现。
阅读全文