题解 | #二叉树中和为某一值的路径(一)#
二叉树中和为某一值的路径(一)
https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param sum int整型 * @return bool布尔型 */ boolean eq=false; //将eq定义在全局,可以使得eq避免函数递归时参数传递的复杂性 private void travelPaths(TreeNode vroot, int temp, int sum){ temp = temp + vroot.val; // 当前路径和 if(vroot.left!=null){ travelPaths(vroot.left, temp, sum); } if(vroot.right!=null){ travelPaths(vroot.right, temp, sum); } if(vroot.left==null && vroot.right==null){ if(temp==sum) eq = eq || true; // 通过或运算,一旦有一条路满足,那么就为真 else temp = temp - vroot.val; // 如果不相等,在走另一“岔路”时会剪掉当前的节点值 System.out.println(eq); } } public boolean hasPathSum (TreeNode root, int sum) { // write code here if(root==null) return false; int temp=0; travelPaths(root, temp, sum); return eq; } }
整个的设计思路还是比较精巧间接的:
1,使用递归的算法
2,也许这个问题可以用栈的思想来解决,这里使用到的累加和以及,判断不满足条件就递归到上一层中,并减掉当前节点值的思想,也有出栈入栈的这个思想在里面。