一. 问题描述
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。
二. 解题思路
本体步骤:采用深度优先遍历+递归的方法进行判断。
步骤一:构建递归函数(root,已经积累的值val,目标值tacket)。
步骤二:判断二:如果root是叶节点且val==tacket则返回true,如果root是非叶节点则接着进行将root转换成root.left和root.right节点进行递归,只要有一个为true,则返回true。
步骤三:重复步骤二:直到遍历所有节点。
三. 执行结果
执行用时 :0 ms, 在所有 java 提交中击败了100.00%的用户
内存消耗 :37.5 MB, 在所有 java 提交中击败了57.49%的用户
四. Java代码
class Solution { public boolean hasPathSum(TreeNode root, int sum) { if(root==null) { return false; }else { return getTree(root,root.val,sum); } } public boolean getTree(TreeNode root,int num,int tacket) { if(root.left==null&&root.right==null&&num==tacket) { return true; } if(root.left!=null&&getTree(root.left,num+root.left.val,tacket)) { return true; } if(root.right!=null&&getTree(root.right,num+root.right.val,tacket)) { return true; } return false; } }