题解 | #二叉树中和为某一值的路径(一)#
二叉树中和为某一值的路径(一)
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,也许这个问题可以用栈的思想来解决,这里使用到的累加和以及,判断不满足条件就递归到上一层中,并减掉当前节点值的思想,也有出栈入栈的这个思想在里面。
查看8道真题和解析