路径总和

题目描述

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
在这里插入图片描述
返回:
[[5,4,11,2],[5,8,4,5]]

分析

深度搜索从根节点到叶节点的路径,检查各路径上所有节点的值的和是否等于sum。
使用何种数据结构存储遍历路径上的点?
如何判断一个节点为叶节点,当遍历到叶节点时应该做什么?
思路:

  1. 从根节点深度遍历二叉树,先序遍历时,将该节点存储至path栈中,使用path_value记录累加和;
  2. 当遍历至叶节点时,检查path_value是否等于sum,若相等则将path中的元素加入result列表中。
  3. 在后续遍历时,将该节点从path栈中弹出,path_value减去该节点的值。
public void preorderPrint(TreeNode head,int sum,int pathSum,List> result,Stack stack){
		if(head==null)
			return;
		pathSum+=head.val;
		stack.push(head.val);
		if(head.left==null&&head.right==null&&pathSum==sum) {
			List li=new ArrayList<>();
			for(int i=0;i> pathSum(TreeNode root, int sum) {
		 List> result=new ArrayList<>();
		 int pathSum=0;
		 Stack stack=new Stack<>();
		 preorderPrint(root, sum, pathSum, result, stack);
		 return result;
	 }

你可能感兴趣的:(LeetCode)