在二叉树中找到累加和为指定值的最长路径长度
2017-11-16 11:20
274 查看
import java.util.*;
//在二叉树中找到累加和为指定值的最长路径长度
public class SumMaxLen{
//二叉树节点的定义
public static class Node{
public int value;
public Node left;
public Node right;
public Node(int data)
{
this.value=data;
}
}
//获取指定值的最长路径长度
public static int sumMaxLen(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.containsKey(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;
}
public static void main(String[]args)
{
/**
-3
3 -9
1 0 2 1
1 6
*/
Node node =new Node(-3);
node.left=new Node(3);
node.right=new Node(-9);
node.left.left=new Node(1);
node.left.right=new Node(0);
node.right.left=new Node(2);
node.right.right=new Node(1);
node.left.right.left=new Node(1);
node.left.right.right=new Node(6);
System.out.println("最长路径为:"+sumMaxLen(node,6));
System.out.println("最长路径为:"+sumMaxLen(node,-9));
}
}
相关文章推荐
- 二叉树问题---在二叉树中找到累加和为指定值的最长路径长度
- 二叉树系列---找到累加和为指定值的最长路径长度
- 在二叉树中找到累加和为指定值的最长路径长度
- 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
- 二叉树的最长的路径长度和最大路径和
- 求二叉树中的第一条最长路径长度,并输出最长路径上的节点
- 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
- 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
- 算法题15 二叉树的最长的路径长度&amp;&amp;最大路径和
- 算法题15 二叉树的最长的路径长度&&最大路径和
- 二叉树根节点到指定节点的路径
- 求解最优二叉树所有叶子结点的带权路径长度之和
- SRM 627 D1L2:GraphInversions,DFS,求所有指定长度的路径, Binary indexed tree (BIT)
- leetcode 388. Longest Absolute File Path 最长长度文件路径 + 广度优先遍历BFS
- 在二叉树中找到指定的元素,如果有重复出现的元素,要求元素为深度最深的任何一个。
- 二叉树单色路径最长&&穿珠子
- 给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶节点的最短路径上的节点数量
- 编程实现求一棵二叉树的最短树路径和最长树路径
- 06-4. How Long Does It Take (25)拓扑排序 求关键路径的最长的长度
- 求解一颗二叉树中两个叶子节点最长的路径