代码片段如下:
class Node{
public int val;
public List<Node> children;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public List<Node> getChildren() {
return this.children;
}
public void setChildren(List<Node> children) {
this.children = children;
}
public Node() {}
public Node(int val,List<Node> children) {
this.val = val;
this.children = children;
}
}
class Tree{
Node rootNode;
Node[] nodes=new Node[10];
List<Node> tempChildren=new Vector<Node>();
List<Node> Children1=new Vector<Node>();
List<Node> Children2=new Vector<Node>();
List<Node> Children3=new Vector<Node>();
List<Node> Children4=new Vector<Node>();
Queue<Node> childrenQue=new LinkedList<Node>();
public Tree() {
// TODO Auto-generated constructor stub
//先给每个节点赋值
for (int i = 0; i < nodes.length; i++) {
nodes[i]=new Node(i+1, null);
}
//建立节点之间的父子关系
Children1.add(nodes[8]);
Children1.add(nodes[1]);
Children1.add(nodes[3]);
nodes[2].setChildren(Children1);
//System.out.println(nodes[2].children.get(2).val);
Children2.add(nodes[5]);
nodes[4].setChildren(Children2);
Children3.add(nodes[7]);
Children3.add(nodes[9]);
nodes[6].setChildren(Children3);
Children4.add(nodes[2]);
Children4.add(nodes[4]);
Children4.add(nodes[6]);
nodes[0].setChildren(Children4);
rootNode=nodes[0];
//System.out.println(nodes[2].children.size());
}
//node为待搜索的树的根节点,val为待搜索的节点的值
public boolean BFS(Node node,int val) {
if (node==null) {
return false;
}
System.out.print("遍历路径:");
if (node.getVal()==val) {
return true;
}
childrenQue.offer(node);
/* for (int i = 0; i < tempChildren.size(); i++) {
childrenQue.offer(tempChildren.get(i));
}*/
while (!childrenQue.isEmpty()) {
///System.out.println("hello");
Node headNode=childrenQue.poll();
System.out.print(headNode.getVal()+" ");
if (headNode.getVal()==val) {
System.out.println(" 这棵树包含待寻找的节点");
return true;
}
tempChildren=headNode.getChildren();
if (tempChildren!=null) {
for (int i = 0; i < tempChildren.size(); i++) {
childrenQue.offer(tempChildren.get(i));
}
}
/* for (int i = 0; i < tempChildren.size(); i++) {
System.out.println("该节点孩子节点的个数为:"+tempChildren.size()+" 第"+(i+1)+
"个节点的值为:"+tempChildren.get(i).val);
childrenQue.offer(tempChildren.get(i));
}*/
}
System.out.println("这棵树不包含待寻找的节点");
return false;
}
}
上面代码中注释掉的for循环会报NullPointerException,猜测应该是java的集合为null时不能执行集合对应的操作。