题解 | #二叉树中和为某一值的路径(一)#

二叉树中和为某一值的路径(一)

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,也许这个问题可以用栈的思想来解决,这里使用到的累加和以及,判断不满足条件就递归到上一层中,并减掉当前节点值的思想,也有出栈入栈的这个思想在里面。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务