题目描述:
描述
给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
算法思路:
本题使用dfs进行求解,同时采用递归,对于dfs如果遍历到的节点为空则返回false,如果遍历到叶子节点并且从根节点到叶子节点的路径之和刚好等于sum,那么返回true,否则向左右子树进行遍历。
算法实现:
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) {
// write code here
// write code here
//排除特殊情况
if (root==null){
return false;
}
//进行深度优先遍历
return dfs(root,sum);
}
public boolean dfs(TreeNode node,int target){
//如果已经遍历到叶子节点
if (node==null){
return false;
}
target = target-node.val;
//说明已经找到路径了(从根节点一直到叶子节点)
if (target==0&&node.left==null&&node.right==null){
return true;
}else{
//还没有到叶子节点,继续遍历
return dfs(node.left,target)||dfs(node.right,target);
}
}
}