leetcode112\113\437 路径总和三道(Medium)
时间:2020-07-12
本文章向大家介绍leetcode112\113\437 路径总和三道(Medium),主要包括leetcode112\113\437 路径总和三道(Medium)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
leetcode112 路径总和I
题目来源:leetcode112 路径总和I
题目描述:
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。
解题思路:
从根节点开始,每到一个节点从sum扣掉当前节点的值,到叶子结点的时候判断sum是否为0。递归的判断左子树和右子树。
/**
* 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:
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL) {
return false;
}
sum-=root->val;
if(sum==0&&root->left==NULL&&root->right==NULL) return true;//到叶子节点判断递归终止。
return hasPathSum(root->left,sum)||hasPathSum(root->right,sum);//递归的判断左子树和右子树
}
};
leetcode113 路径总和II
题目来源:leetcode113 路径总和II
题目描述:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
解题思路:
和112类似,只是要求记录路径,需要用回溯,递归终止时需要把当前路径加入结果集。回溯的要点是选择-回溯-撤销选择。
/**
* 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:
vector<vector<int>> ans;
vector<int> temp;
vector<vector<int>> pathSum(TreeNode* root, int sum) {
if(root==NULL) return ans;
temp.push_back(root->val);//选择
sum-=root->val;
if(sum==0&&root->left==NULL&&root->right==NULL) {
ans.push_back(temp);
}
//回溯
pathSum(root->left,sum);
pathSum(root->right,sum);
temp.pop_back();//撤销选择
return ans;
}
};
leetcode437 路径总和III
题目来源:leetcode437 路径总和III
题目描述:
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
返回 3。和等于 8 的路径有:
- 5 -> 3
- 5 -> 2 -> 1
- -3 -> 11
解题思路:
由于不一定从根节点开始,也不要求从叶子结点结束。可以用双重dfs。
①先序递归遍历每个节点②以每个节点作为起始节点DFS寻找满足条件的路径
/**
* 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 ans=0;
void dfs(TreeNode* root,int sum){
if(root==NULL) return;
sum-=root->val;
if(sum==0){
ans++;
}
dfs(root->left,sum);
dfs(root->right,sum);
}
int pathSum(TreeNode* root, int sum) {
if(root==NULL) return ans;
dfs(root,sum);
pathSum(root->left,sum);
pathSum(root->right,sum);
return ans;
}
};
原文地址:https://www.cnblogs.com/yjcoding/p/13287031.html
- webvirtmgr-重命名kvm虚拟机的名称
- Lucene 2.0最基本的入门代码
- 网站每日PV/IP统计/总带宽/URL统计脚本分享(依据网站访问日志)
- 查看服务器系统资源(cpu,内容)利用率前几位的进程的方法
- 腾讯云平台部总经理陈磊:大数据背后的技术支撑
- DataSet与Xml相互转化
- SqlTransaction事务使用示例
- nginx的web缓存服务环境部署记录
- nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
- [转自blueidea]像table一样布局div Ⅰ
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 升级个人网站框架组件IBatisNet+Castle
- 如何在多线程中调用winform窗体控件
- gerrit代码简单备份方案分享
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 利用lynis如何进行linux漏洞扫描详解
- Linux shell命令用法及常见用例之tar命令
- Linux 下解压 rar 文件的方法
- Redis数据结构-压缩列表
- HTTP文件缓存判断流程
- Linux系统 为命令配置别名的方法
- Redis数据结构-跳跃表
- Canvas系列(10):动画初级
- Canvas系列(5):绘制文字
- 详解Keepalived安装与配置
- Redis数据结构-字典
- 编程体系结构(07):JavaEE之Web开发
- Centos 6.5环境实现本地局域网搭建YUM的方法【基于HTTP】
- Doug Lea在J.U.C包里面写的BUG又被网友发现了。
- CentOs 7.*中配置安装phpMyAdmin的完整步骤记录