【发布时间】:2017-08-19 15:28:50
【问题描述】:
试图计算从二叉树的根到叶子的路径和。似乎不起作用,dosIt 的值变为 true,但由于它是递归的,它在堆栈弹出时切换回 false。不知道如何修复它。 如何更改我的代码,以便一旦 doesIt 的值更改为 true,它就会一直向上传播?
考虑树:[5,4,8,11,null,null,null,7,2] InOrder
所以 5 有两个孩子 4 和 8,4 有 1 个孩子 11,8 没有孩子
hasPathSum(root,22)
public boolean hasPathSum(TreeNode root, int sum) {
boolean doesIt = false;
if (root != null)
{
doesIt = pathSum(root, sum, 0, doesIt);
}
return doesIt;
}
private static boolean pathSum(TreeNode root, int sum, int sumSoFar, boolean doesIt)
{
if (root.left == null && root.right == null)
{
if (sumSoFar+root.val == sum)
{
doesIt = true;
return doesIt;
}
return doesIt;
}
if (root.left != null)
{
pathSum(root.left, sum, sumSoFar+root.val,doesIt);
}
if (root.right != null)
{
pathSum(root.right, sum, sumSoFar+root.val,doesIt);
}
return doesIt;
}
【问题讨论】:
-
7 和 2 怎么样。画一棵树并更新答案。
-
当
pathSum递归调用自身时,内部pathSum调用会返回一个值,但您不使用它。您只需要修复您的方法,以便它使用这些返回值。不过,我不知道怎么做,因为我不明白该方法应该做什么。
标签: java recursion data-structures binary-tree