public static void findMaxPath(Node node,Stack<Node> stack,List<Integer> list){
if(node==null){
return;
}
stack.push(node);
boolean flag=node.leftChild==null&&node.rightChild==null;
if(flag){
int sum=0;
for(Node n:stack){
sum+=n.element;//计算出从每个叶子节点到跟的路径之和
}
list.add(sum);//保存每条路径之和
}
if(node.leftChild!=null){
findMaxPath(node.leftChild,stack,list);
}
if(node.rightChild!=null){
findMaxPath(node.rightChild,stack,list);
}
stack.pop();
}
如果要求打印最大路径可以在形参列表把list换成Map<String,Integer>把路径作为key,路径上个结点的和作为value.
public static void findMaxPath2(Node node,Stack<Node> stack,Map<String,Integer> map){
if(node==null)
return;
stack.add(node);
if(node.leftChild==null&&node.rightChild==null){
String path="";
int sum=0;
for(Node n:stack){
path+=n.element+"->"; //每条路径名称
sum+=n.element; //路径上各节点之和
}
map.put(path,sum); //key:路径上各节点名称 value:各节点之和
}
if(node.leftChild!=null){
findMaxPath2(node.leftChild,stack,map);
}
if(node.rightChild!=null){
findMaxPath2(node.rightChild,stack,map);
}
stack.pop();
}
最后只需将map中的键值打印输出即可。