- 代码实现
//普通树结点
public class MapNode {
public int val;
public List<MapNode> neighbor;//表示当前节点的所有分支节点
public MapNode(int val) {
this.val = val;
neighbor = new ArrayList<>();
}
}
public static boolean wideSearch(List<MapNode> roots, int target){
if(roots == null || roots.isEmpty()) return false;
List<MapNode> childList = new ArrayList<>();
for(MapNode node : roots){
if(node.val== target)return true;
childList.addAll(node.neighbor);//将同一层的所有节点放入一个集合中递归遍历
}
return wideSearch(childList,target);
}
public static boolean wideSearch(MapNode root, int target){
List<MapNode> roots = new ArrayList<>();
roots.add(root);
return wideSearch(roots,target);
}
测试:
public class Main {
public static void main(String[] args) {
MapNode n1 = new MapNode(1);
MapNode n2 = new MapNode(2);
MapNode n3 = new MapNode(3);
MapNode n4 = new MapNode(4);
MapNode n5 = new MapNode(5);
MapNode n6 = new MapNode(6);
MapNode n7 = new MapNode(7);
MapNode n8 = new MapNode(8);
MapNode n9 = new MapNode(9);
n1.neighbor.add(n2);
n1.neighbor.add(n3);
n1.neighbor.add(n4);
n2.neighbor.add(n5);
n2.neighbor.add(n6);
n3.neighbor.add(n7);
n4.neighbor.add(n8);
n5.neighbor.add(n9);
System.out.println(wideSearch(n1,8));//true
System.out.println(wideSearch(n1,10));//false
}
}