在二叉树中找到累加和为指定值的最长路径长度

在二叉树中找到累加和为指定值的最长路径长度
给定一棵二叉树的头节点 head 和一个 32 位整数 sum,二叉树节点值类型为整型,求累加和为 sum 的最长路径长度。路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所形成的节点链。

额外空间复杂度为 O(h),h 为二叉树的高度。


public static int getMaxLength(Node head, int sum){
	HashMap sumMap = new HashMap();
	sumMap.put(0,0);
	return preOrder(head, sum, 0, 1, 0, sumMap);
}
public static int preOrder(Node head, int sum, int preSum, int level, int maxLen, HashMap sumMap){
	if(head == null){
		return maxLen;
	}
	int curSum = preSum + head.value;
	if(!sumMap.containsKeu(curSum)){
		sumMap.put(curSum, level);
	}
	if(sumMap.containsKey(curSum - sum)){
		maxLen = Math.max(level - sumMap.get(curSum - sum), maxLen);
	}
	maxLen = preOrder(head.left, sum, curSum, level + 1, maxLen, sumMap);
	maxLen = preOrder(head.right, sum, curSum, level + 1, maxLen, sumMap);
	if(level == sumMap.get(curSum)){
		sumMap.remove(curSum);
	}
	return maxLen;
}


你可能感兴趣的:(算法,数据结构,二叉树)