需求:根据关键字查询,树形结构中的name如果匹配上关键字,则显示出所有子集和父级
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
class Node {
private String node;
private String pnode;
private String name;
public Node(String node, String pnode, String name) {
this.node = node;
this.pnode = pnode;
this.name = name;
}
public String getNode() {
return node;
}
public String getPnode() {
return pnode;
}
public String getName() {
return name;
}
}
public class SubsetGenerator {
private static void getAllParents(List<Node> nodes, Node keynode, List<Node> parents) {
for (Node node : nodes) {
if (node.getNode().equals(keynode.getPnode())) {
parents.add(node);
getAllParents(nodes, node, parents);
}
}
}
private static void getAllChild(List<Node> nodes, Node keynode, List<Node> children) {
System.out.println(keynode.getNode());
for (Node node : nodes) {
if (node.getPnode().equals(keynode.getNode())) {
children.add(node);
getAllChild(nodes, node, children);
}
}
}
public static void main(String[] args) {
List<Node> nodes = new ArrayList<>();
nodes.add(new Node("1", "", "Node 1"));
nodes.add(new Node("1-1", "1", "Node 2"));
nodes.add(new Node("1-2", "1", "Node 3"));
nodes.add(new Node("1-2-1", "1-2", "Node 3"));
nodes.add(new Node("1-1-1", "1-1", "Node 4"));
nodes.add(new Node("1-1-1-1", "1-1-1", "Node 5"));
nodes.add(new Node("1-1-1-2", "1-1-1", "Node 6"));
nodes.add(new Node("2", "", "Node 6"));
nodes.add(new Node("2-1", "2", "Node 6"));
nodes.add(new Node("2-2", "2", "Node 6"));
nodes.add(new Node("2-3", "2", "Node 6"));
Node node = new Node("1", "", "Node 1");
ArrayList<Node> parents = new ArrayList<>();
getAllParents(nodes, node, parents);
ArrayList<Node> children = new ArrayList<>();
getAllChild(nodes, node, children);
// 打印子集
System.out.println("Children:");
for (Node child : children) {
System.out.println(child);
}
// 打印所有父级
System.out.println("Parents:");
for (Node parent : parents) {
System.out.println(parent);
}
}
}