最大路径之和

public static void findMaxPath(Node node,Stack stack,List 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把路径作为key,路径上个结点的和作为value.

public static void findMaxPath2(Node node,Stack stack,Map 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中的键值打印输出即可。

你可能感兴趣的:(Algorithms)