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

来源:互联网 发布:linux设置静态ip 编辑:程序博客网 时间:2024/05/20 15:59
在二叉树中找到累加和为指定值的最长路径长度
给定一棵二叉树的头节点 head 和一个 32 位整数 sum,二叉树节点值类型为整型,求累加和为 sum 的最长路径长度。路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所形成的节点链。

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


public static int getMaxLength(Node head, int sum){HashMap<Integer, Integer> sumMap = new HashMap<Integer, Integer>();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<Integer, Integer> 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;}


阅读全文
0 0