[LeetCode]437. Path Sum III(求二叉树中路径和等于sum的数量)
来源:互联网 发布:国产电视推荐 知乎 编辑:程序博客网 时间:2024/05/22 00:06
437. Path Sum III
原题链接
相似题目题解:112. Path Sum && 113. Path Sum II
You are given a binary tree in which each node contains an integer value.
Find the number of paths that sum to a given value.
The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
Example:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \3 -2 1Return 3. The paths that sum to 8 are:1. 5 -> 32. 5 -> 2 -> 13. -3 -> 11
题目大意:
- 这道题跟112和113类似,只是路径的开头和结尾不用是根节点和叶节点
- 求出二叉树路径和等于sum的路径数量
思路:
- 利用DFS的思想,遍历二叉树
- 先遍历路径开头是根节点的路径,找出符合条件的数量,再求路径开头是根节点左孩子的路径,找出符合条件的数量,依次遍历
- 由于只需要返回数量,所以只需要找到符合条件路径,+1即可
- 注意helper函数参数pre前不加&(引用符号)
代码如下:(23ms)
#include <iostream>#include <queue>using namespace std;//Definition for a binary tree node.struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: int pathSum(TreeNode* root, int sum) {//23ms if(root == nullptr) return 0; return helper(root, 0, sum) + pathSum(root->left, sum) + pathSum(root->right, sum); }private: int helper(TreeNode* root, int pre, int &sum){//注意pre前不加& if(root == nullptr) return 0; int current = pre + root->val; return (current==sum) + helper(root->left, current, sum) + helper(root->right, current, sum); }};// 创建二叉树TreeNode* CreateTreeByLevel(vector<int> num){ int len = num.size(); if(len == 0){ return NULL; }//if queue<TreeNode*> queue; int index = 0; // 创建根节点 TreeNode *root = new TreeNode(num[index++]); // 入队列 queue.push(root); TreeNode *p = NULL; while(!queue.empty() && index < len){ // 出队列 p = queue.front(); queue.pop(); // 左节点 if(index < len && num[index] != NULL){ // 如果不空创建一个节点 TreeNode *leftNode = new TreeNode(num[index]); p->left = leftNode; queue.push(leftNode); } index++; // 右节点 if(index < len && num[index] != NULL){ // 如果不空创建一个节点 TreeNode *rightNode = new TreeNode(num[index]); p->right = rightNode; queue.push(rightNode); } index++; }//while return root;}int main(){ Solution s; vector<int> num = {10,5,-3,3,2,NULL,11,3,-2,NULL,1}; TreeNode* root = CreateTreeByLevel(num); cout<< s.pathSum(root,8) <<endl; return 0;}
阅读全文
0 0
- [LeetCode]437. Path Sum III(求二叉树中路径和等于sum的数量)
- LeetCode 437. Path Sum III 题解 和固定的二叉树路径数目
- Leetcode:112. Path Sum (求Tree中是否存在路径的和等于给定值)
- Path Sum 二叉树路径和 @LeetCode
- [LeetCode]113. Path Sum II(列出二叉树根到叶路径和等于sum的所有路径)
- 437. Path Sum III(二叉树的路径和之三)
- [LeetCode] Path Sum 求二叉树中满足要求的路径
- [LeetCode]112. Path Sum(判断二叉树根到叶路径和是否等于sum)
- Leetcode 437. Path Sum III 路径和3 解题报告
- leetcode 437. Path Sum III(路径和)(DFS)
- LeetCode(Binary Tree Maximum Path Sum) 在二叉树中找出一条和最大的路径
- leetcode 113. Path Sum II 二叉树求符合和值为sum的链
- LeetCode (12) Path Sum (二叉树路径和判断)
- 【leetcode 二叉树路径和】Path Sum 和 Path Sum II
- LeetCode 437. Path Sum III
- LeetCode 437. Path Sum III
- LeetCode 437. Path Sum III
- leetcode 437. Path Sum III
- 机器学习笔记——正则化线性回归
- 进程池和线程池
- Spark 之 RDD
- Weird Rounding
- POJ-2236-Wireless Network [并查集]
- [LeetCode]437. Path Sum III(求二叉树中路径和等于sum的数量)
- lightoj1138Trailing Zeroes (III) 二分
- 九个步骤让你成为PHP专家
- 今年暑假不AC
- 剑指offer-扑克牌顺子
- CSS文本与字体
- HDU 1599 find the mincost route (floyd)
- Fragment懒加载
- JAVA从网络下载文件到本地