问题-
我的解决方案-
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null || sum == 0){
return false;
}
List<Integer> resultSet = new ArrayList<Integer>();
Integer result = root.val;
inorder(root, result, resultSet);
return resultSet.contains(sum);
}
public void inorder(TreeNode root, Integer result, List<Integer> resultSet){
if (root.left == null && root.right == null){
resultSet.add(result);
}
if (root.left != null) {
result += Integer.valueOf(root.left.val);
inorder(root.left, result, resultSet);
}
if (root.right != null) {
result += Integer.valueOf(root.right.val);
inorder(root.right, result, resultSet);
}
}
}
输出-
输入:[1,-2,-3,1,3,-2,null,-1]3输出:应为真:假
我真的不知道我在这方面出了什么问题。我尝试玩int和整数类型选项的结果,但它不工作。请帮忙。
我看到的问题是result
变量,因为一旦将left
节点的值添加到result
中,并使用left
子树完成后,u将向结果添加right child
的值,这是错误的,因为现在它具有left
和right
子值之和。
所以本质上,您是在添加inorder
遍历中节点root
之前的结果
中所有节点的值。
你能试试这个吗
public void inorder(TreeNode root, Integer result, List<Integer> resultSet){
if (root.left == null && root.right == null){
resultSet.add(result);
}
if (root.left != null) {
inorder(root.left, result+Integer.valueOf(root.left.val), resultSet);
}
if (root.right != null) {
inorder(root.right, result+Integer.valueOf(root.right.val), resultSet);
}
}
编辑:1
解决此问题的另一种简单方法是:不需要创建包含所有根到叶路径之和的数组。您只需不断递减所需的总和。
代码:
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
} else {
return hasPathSumHelper(root, sum);
}
}
boolean hasPathSumHelper(TreeNode root, int sum) {
if (root.left == null && root.right == null) {//if leaf node
if (Integer.valueOf(root.val) == sum) { //if node value is equal to sum
return true;
} else {
return false;
}
}
if ((root.left != null) && (root.right != null)) {
return (hasPathSumHelper(root.left, sum - Integer.valueOf(root.val)) || hasPathSumHelper(root.right, sum - Integer.valueOf(root.val)));
}
if (root.left != null) {
return hasPathSumHelper(root.left, sum - Integer.valueOf(root.val));
} else {
return hasPathSumHelper(root.right, sum - Integer.valueOf(root.val));
}
}
有一个关于二叉树的基本java示例的问题:给定一个二叉树,查找路径中节点和等于给定目标数的所有路径。(有效路径是从根节点到任何叶节点。)。为什么我们需要
我们有一个边带正权的有向图G(V,E),作为源顶点s,目标点T。此外,最短的s-t路径包括图中的每一个其他顶点。我需要计算s和t之间的交替最短路径距离,以防某些边e∈e被删除。我想设计一个O(e^2logV)算法,它计算图G\e中所有e∈e的最短S-T路径距离。最后的输出应该是一个大小为E的数组,其中edge E的条目应该包含G\E中最短的S-T路径距离。
我必须找到从根节点到叶节点的最大和。我提出了以下节点,但它没有给出正确的输出。树可以有2个子节点以上(它不是二叉树)。 我用了另一种方法来解决我的问题。尽管知道正确的解决方案可以很好地找到非二叉树的最大和路径。
在一个具有不同正边的无向图中,是否可能有一个MST与最短路径树没有公共边? 我一直试图引出不同的例子,但似乎这是不可能的。最短路径树中的最短路径边似乎也应该包括在MST中。
如何在二叉树中找到最小路径和,并打印路径?路径可以从ROOT节点到任何LEAF节点。我已经编写了C代码来查找最小和,但是在打印路径时遇到了问题。 参数列表中的未使用,有人能帮我打印路径和最小的路径吗?
试图计算二叉树中从根到叶的路径和。似乎不起作用,doesIt的值变为true,但由于它是递归的,所以当堆栈弹出时,它会切换回false。我不知道怎么修。如何更改代码,使doesIt的值更改为true后,它会一直向上传播? 考虑树:[5,4,8,11, null, null, null,7,2]无序 5有两个孩子4和8,4有一个孩子11,8没有孩子 hasPathSum(根,22)