第112题:路径总和

一. 问题描述

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。

说明: 叶子节点是指没有子节点的节点。

示例: 

给定如下二叉树,以及目标和 sum = 22,

               5

              /   \

            4    8

            /      / \

          11  13  4

扫描二维码关注公众号,回复: 7861492 查看本文章

           /  \         \

         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;
        
        
    }
    
    
}

猜你喜欢

转载自www.cnblogs.com/xiaobaidashu/p/11864455.html