在Java中,要通過children進行遞歸查詢,你可以使用遞歸方法
import java.util.ArrayList;
import java.util.List;
public class Node {
private int id;
private String name;
private List<Node> children;
public Node(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<>();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public List<Node> getChildren() {
return children;
}
public void addChild(Node child) {
children.add(child);
}
}
class RecursiveSearch {
public static void main(String[] args) {
Node root = createSampleTree();
int targetId = 4;
Node result = findNodeById(root, targetId);
if (result != null) {
System.out.println("找到了節點: " + result.getName());
} else {
System.out.println("沒有找到ID為 " + targetId + " 的節點");
}
}
private static Node createSampleTree() {
Node root = new Node(1, "root");
Node node2 = new Node(2, "node2");
Node node3 = new Node(3, "node3");
Node node4 = new Node(4, "node4");
Node node5 = new Node(5, "node5");
root.addChild(node2);
root.addChild(node3);
node2.addChild(node4);
node2.addChild(node5);
return root;
}
public static Node findNodeById(Node root, int targetId) {
if (root.getId() == targetId) {
return root;
}
for (Node child : root.getChildren()) {
Node result = findNodeById(child, targetId);
if (result != null) {
return result;
}
}
return null;
}
}
在這個例子中,我們首先創建了一個表示樹節點的Node
類。然后,我們創建了一個名為RecursiveSearch
的類,其中包含一個名為findNodeById
的遞歸方法。這個方法接受一個Node
類型的參數root
和一個整數targetId
,它會在以root
為根的子樹中查找具有給定ID的節點。
findNodeById
方法首先檢查當前節點的ID是否與目標ID相等。如果相等,則返回當前節點。如果不相等,該方法將遍歷當前節點的所有子節點,并對每個子節點遞歸調用findNodeById
方法。如果在子樹中找到了具有目標ID的節點,該方法將返回該節點。如果在整個子樹中都沒有找到具有目標ID的節點,該方法將返回null
。
在main
方法中,我們創建了一個簡單的樹結構,并調用findNodeById
方法來查找具有特定ID的節點。如果找到了該節點,我們將打印其名稱;否則,我們將打印一條消息,指出沒有找到具有該ID的節點。