path_sum

题目描述

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.

For example:

Given the below binary tree and sum = 22,

          5
         /         4   8
       /   /       11  13  4
     /  \          7    2      1

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

解析思路

题目的意思就是给定一个二叉树,每个结点有数值,给定一个sum,看存不存在一条路径使得该路径上的结点数值和等于sum。这里只要求判断是否存在一条路径,path_sum2则是要求找出所有的路径,这里利用深度优先搜索(DFS)来解决,以给定例子为例分析,判断从根节点是否存在一条sum=22的路径,相当于判断从左儿子开始是否有一条22-5=17的路径,或者从右儿子开始是否有一条22-8=14的路径。

详细代码

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */

    //题目强调是从root到叶子节点  注意叶子节点的定义
    public boolean hasPathSum(TreeNode root, int sum) {
        if(root == null)
        {
            //空树  结束条件之一
            return false;
        }
        else
        {
            if(root.left==null && root.right==null)
            {
                //叶子节点 left right都为空
                if(sum== root.val)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                //非叶子结点
                return hasPathSum(root.left, sum-root.val) | hasPathSum(root.right, sum-root.val);
            }

        }
    }

总结

此题目是关于BST和DFS的,前面word_ladder和word_ladder2 是关于graph的BFS(没有建立图,而是利用题目限制的条件进行搜索,否则超时),可以放在一起总结下,此题目还有path_sum2版本,要求算出所有的路径,我会在接下来的文章中介绍。

时间: 2024-11-07 06:59:59

path_sum的相关文章

leetcode:Path_Sum

一.     题目 给你一个二叉树一和一个整数值,判断在树中是否存在从根节点到叶子节点的路径使得这个路径上的数值和为这个整数. 例如:二叉树              和值22 5 /      \ 4        8 /          /  \ 11      13   4 /  \        \ 7    2      1 存在路径:5-4-11-2,5+4+11+2=22 二.     分析 首先,这道题让我感觉最不好想的是 1>  关于值的判断(PS:就算是根节点不为0,结果也

Project Euler 80:Path sum: two ways 路径和:两个方向

Path sum: two ways In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by only moving to the right and down, is indicated in bold red and is equal to 2427.           131 673 234 103 18 201 96 342 965 150 630 803 74

path_sum2

题目描述 Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum. For example: Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ / 7 2 5 1 return [ [5,4,11,2], [5,8,4,5] ] 解题思路 做此题前可以先尝试path_s

BZOJ 4034[HAOI2015]树上操作(树链剖分)

Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a .操作 3 :询问某个节点 x 到根的路径中所有点的点权和.Input 第一行包含两个整数 N, M .表示点数和操作数.接下来一行 N 个整数,表示树中节点的初始权值.接下来 N-1 行每行三个正整数 fr, to , 表示该树中存在一条边 (fr, to) .再接下来 M 行,