import java.util.ArrayList;
import java.util.List;
class Node
{
public String id;
public List<Node> children;
Node()
{
id="0";
children=new ArrayList<>();
}
}
public class TreePath {
public List<Node>findNodeAndPath2(Node root,String targetId)
{
List<Node>list=new ArrayList<>();
if(root==null)return null;
if(root.id.equals(targetId))
{
list.add(root);
return list;
}
list.add(root);
for(Node n: root.children)
{
List<Node>tmp=findNodeAndPath2(n,targetId);
if(tmp==null) continue;
if(tmp.get(tmp.size()-1).id.equals(targetId))
{
list.addAll(tmp);
return list;
}
}
return null;
}
测试数据图
public static void main(String[] args) {
Node _13=new Node();
_13.id="13";
Node _10=new Node();
_10.id="10";
_10.children.add(_13);
Node _9=new Node();
_9.id="9";
Node _4=new Node();
_4.id="4";
Node _2=new Node();
_2.id="2";
_2.children.add(_4);
_2.children.add(_9);
_2.children.add(_10);
Node _11=new Node();
_11.id="11";
Node _19=new Node();
_19.id="19";
Node _18=new Node();
_18.id="18";
Node _21=new Node();
_21.id="21";
Node _20=new Node();
_20.id="20";
_18.children.add(_21);
_18.children.add(_20);
_11.children.add(_19);
_11.children.add(_18);
Node _1=new Node();
_1.id="1";
_1.children.add(_2);
_1.children.add(_11);
TreePath treePath=new TreePath();
List<Node>list=treePath.findNodeAndPath2(_1,"20");
for(Node n:list)
{
System.out.println(n.id);
}
}
}