题解 | #牛的奶量统计II#
牛的奶量统计II
https://www.nowcoder.com/practice/9c56daaded6b4ba3a9f93ce885dab764
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 targetSum int整型
* @return bool布尔型
*/
public boolean hasPathSumII (TreeNode root, int targetSum) {
// write code here
if (root == null) {
return false;
}
if(search(root.left, root.right, targetSum - root.val)){
return true;
}
return hasPathSumII(root.right,targetSum)||hasPathSumII(root.left,targetSum);
}
public boolean search(TreeNode left_node, TreeNode right_node, int targetSum) {
if (targetSum == 0 || (left_node != null && left_node.val == targetSum) ||
(right_node != null && right_node.val == targetSum)
|| (left_node != null && right_node != null &&
left_node.val + right_node.val == targetSum)) {
return true;
} else if (targetSum < 0 || (left_node == null && right_node == null)) {
return false;
}
boolean flag = false;
if (left_node != null) {
flag = search(left_node.left, right_node, targetSum - left_node.val) ||
search(left_node.right, right_node, targetSum - left_node.val);
}
if (!flag && right_node != null) {
flag = search(left_node, right_node.left, targetSum - right_node.val) ||
search(left_node, right_node.right, targetSum - right_node.val);
}
if (!flag && left_node != null && right_node != null) {
flag = search(left_node.left, right_node.left,
targetSum - left_node.val - right_node.val)
|| search(left_node.left, right_node.right,
targetSum - left_node.val - right_node.val)
|| search(left_node.right, right_node.left,
targetSum - left_node.val - right_node.val)
|| search(left_node.right, right_node.right,
targetSum - left_node.val - right_node.val);
}
return flag;
}
}
本题考察的知识点是二叉树,所用编程语言是java。
我定义了一个函数用来求得含有根节点的路径之和是否等于targetSum,然后递归遍历所有节点,对于所有节点是否含有含有该节点的路径之和和不含该节点的路径之和是否等于targetSum

查看6道真题和解析