树枝节点之和是否等于给定值

比如一个 [3, 1, 5, 10] 的树,设其根结点为 root, 那么对于函数 hasPathSum(root, 18) 的返回值就是 true。

题目列出的知识点是深度优先搜索,可是我刚明白一点动态规划,所以我考虑的是,符合条件的树枝去掉叶子,剩下节点的和必然等于给定值减去叶子节点。

bool hasPathSum(TreeNode* root, int sum) {
    if (root == nullptr){
        return false;
    }

    if (root->left == nullptr && root->right == nullptr && sum == root->val){
        return true;
    }

    return (hasPathSum(root->left, sum - root->val) || hasPathSum(root->right, sum - root->val));
}
时间: 2024-10-07 06:32:56

树枝节点之和是否等于给定值的相关文章

二叉树中存在路径等于给定值

题目:输入一个二叉树和一个整数,打印出二叉树中所有和给定整数值相等的路径. 分析:先画图 明白几点: 1)根据题意,我们是要遍历整个树才能确定所有符合条件的路径.显然应该从根节点出发,那么我们就应该采用先序遍历.这里遍历就采用递归更简单. 2)遍历完了后如何保存路径呢?这里我们是采用vector而不是stack因为遍历的时候从根节点打印. 每次遍历一个结点,就将其压栈,当前结点访问结束后,递归函数将自动回到父节点,因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值. #include

打印二叉树节点数值总和等于某个给定节点的所有路径

打印二叉树节点数值总和等于某个给定节点的所有路径,路径可以从任意节点开始,任意节点结束. 比如,假设和是8,树如下 的路径有  [[5,3],[8],[5,1,2]].  5  / \ 3     1 /\     /\ 4  8  2   6 思路:遍历所有路径,对于每一个节点,在其路径中向后寻找sum和为target的路径加入到结果中. public List<List<Integer>> findSum(TreeNode root,int sum){ List<List

从数组中选出和等于固定值的n个数(JavaScript实现)

现实生活中的问题,可能会抽象为这样一种数据模型: 从一个数组中挑选出几个数,让这几个数相加的和为指定的值. 大多数读者应该有过网购的经历,网购一般会有个凑单功能,假如读者买了70元的商品,但是必须满100元才能包邮,这时系统会自动推荐一些商品,加起来差不多就100块钱了. 系统如何确定推荐哪些商品呢?这其实就是刚刚提到的模型,我们可以把热销商品的价格放到一个数组中,然后利用算法,找出数组中哪些价格的和为30元. 废话少说,小菜给大家分享一个JavaScript版本的算法实现. 算法代码: 1 f

python 给定数组任意组合等于一个定值的所有解

抛出问题: 求给定数组任意组合等于一个定值的所有解 例如列表l = [1, 2, 3, 4, 5],求任意组合的结果为10的所有答案 问题分析: 实际就是列表的所有排列组合,然后算出每个排列组合的值,记录等于所求值的组合结果. 代码实现就是先生成和 l 等长的全0列表,0表示,列表该位置数不取,1表示列表该位置数取,就这样一直递归,一直到全1 # -*- coding:utf-8 -*- # 日期:2018/6/11 7:30 # Author:小鼠标 # 求给定数组任意组合等于一个定值的所有解

3Sum Closest从数列中找到三个数之和最接近给定值

即求min{ target - a -b -c } a,b,c blog to Set S; (一)最简单的做法当然是求出所有的不相同的三个数和,保存到set里,然后用target,target (+/-) i ,i [0....] 复杂度基本上可以算是O(n^3). int threeSumClosest(vector<int> &num, int target) { int n=num.size(); if(n<3) return 0; unordered_set<in

找出一定范围内多个连续整数,使其立方之和恰好等于另一个整数的立方

题目如图,关于这道题的第一问比较简单,只需验证式子两边是否相等即可.这里主要做一下第二问.  此题要求找出多个连续整数的立方和使其恰好等于另一个整数的立方,因为并没有明确给出相应的条件,比如起始项,项数等,所以找出所有结果并不现实.故将起始项a范围定位1~1000,项数n<=1000. 具体的实现思路很简单,先由两个for循环分别确定起始项和项数,通过立方和公式(此公式可自行推导)求出从a~a+n-1立方和,将其和取立方根,得到的立方根再取立方与立方和比较,若相同则输出. 关于代码中出现的立方和

LeetCode 15 3Sum 找出数组里面3个数的和等于指定值。

题目:Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c) The so

一个数组nums,其中任意两个值等于给定值target,返回这两个值在nums里的位置

1 package com.java.tencent; 2 3 import java.lang.reflect.Array; 4 import java.util.Arrays; 5 import java.util.HashMap; 6 import java.util.Map; 7 8 public class T_1_twoSum { 9 10 /*初级解法*/ 11 public int[] twoSum(int[] nums, int target) { 12 int[] resul

求二叉树中和为给定值的所有路径

转自:http://blog.csdn.net/lalor/article/details/7614381 问题定义: You are given a binary tree in which each node contains a value. Design an algorithm to print all paths which sum up to that value. Note that it can be any path in the tree-it does not have