题目链接:
题目:
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
Note: A leaf is a node with no children.
题目分析:
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。如果存在至少一个,那么就返回true;否则返回false。
解题思路:
利用树的前序遍历,从根节点到叶节点,然后求每次这个节点后,就将 sum 减去这个节点上的值。
利用DFS,到了最后的叶节点(即左右两边都没有子节点了)。就判断此时的 sum ,如果等于0,那就返回true;
然后返回到上一层根节点,上一层根节点是由下一层决定,如果叶节点至少有一个true,那就判断此时的根节点是true。
从而递归到最后即可。
AC代码:(Java)
class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if(root == null)
return false;
sum -= root.val;
if(root.left==null && root.right==null)
{
if(sum == 0)
return true;
else
return false;
}
boolean l = hasPathSum(root.left,sum);
boolean r = hasPathSum(root.right,sum);
if(l || r)
return true;
return false;
}
}