判断二叉树是否有从根节点到叶子节点的节点值之和等于sum的路径

DESC:

题目描述

给定一个二叉树和一个值 sum,判断是否有从根节点到叶子节点的节点值之和等于 sum的路径,
例如:
给出如下的二叉树, sum=22,

返回true,因为存在一条路径 5→4→11→2的节点值之和为 22

示例1

输入

{1,2},0

返回值

false

示例2

输入

{1,2},3

返回值

true

CODE:

JAVA:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    
    public boolean hasPathSum (TreeNode root, int sum) {
        if (root == null) {
            return false;
        }
        // write code here
        return dfs(root, sum, 0);
    }
    public boolean dfs(TreeNode node, int target, int sumNow) {
        if (node == null) {
            return false;
        }
        sumNow += node.val;
        if (node.left == null && node.right == null) {
            if (sumNow == target) {
                return true;
            } else {
                return false;
            }
        } else {
            //左右子树有一个满足即可
            return dfs(node.left, target, sumNow) || dfs(node.right, target, sumNow);
        }
    }
}

NOTES:

  1. dfs,注意怎么返回传递,非叶子节点返回左右子树的结果或集,即左右子树有一方满足即为true

猜你喜欢

转载自blog.csdn.net/SeaSky_Steven/article/details/114889977