二叉树-路径之和
时间:2022-06-08
本文章向大家介绍二叉树-路径之和,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定一个二叉树与整数sum,找出所有从根节点到叶结点的路径,这些路径上的节点值累加和为sum。
#include<vector>
struct TreeNode{
int val;
TreeNode *right;
TreeNode *left;
TreeNode(int x): val(x), left(NULL),right(NULL){}
}
class Solution{
public:
std::vector<std::vector<int>> pathSum(TreeNode *root,int sum){}
};
思考
1.使用何种数据结构存储遍历路径上的节点?
使用栈的数据结构
2.在树的前序遍历时做什么?后序遍历时做什么? 3.如何判断一个节点为叶结点?当遍历到叶结点时应该做什么?
在前序遍历(每遇到一个节点)进行操作,push进栈中(vector实现 )
算法思路
1.从根节点深度遍历二叉树,先序遍历时,将该节点值存储至path栈中(vector实 现),使用 path_value累加节点值。 2.当遍历至叶结点时,检查path_value值是否为sum,若为sum,则将path push 进入result结果中。 3.在后序遍历时,将该节点值从path栈中弹出,path_value减去节点值。
class Solution{
public:
std::vector<std::vector<int>> pathSum(TreeNode *root,int sum){
std::vector<std::vector<int>> result;
std::vector<int> path;
int path_value = 0;
preorder(root, path_value,sum,path,result);
return result;
}
private:
void preorder(TreeNode *node,int &path_value,int sum, std::vector<int> &path,std::vector<std::vector<int>> &result){
if(!node){
return;
}
path_value += node->val;
path.push_back(node->val);
if(path_value == sum && !node->left && !node->right ){
result.push_back(path);
}
preorder(node->left, path_value,sum,path,result);
preorder(node->right, path_value,sum,path,result);
path_value -=node->val;
path.pop_back;
}
};
- ASM 翻译系列第二十四弹:ASM Internal ASM files number 10 and 11
- Redhat设置NFS挂载的简单步骤
- WordPress后台首页显示RSS错误的解决办法
- ASM 翻译系列第十九弹:ASM Internal ASM Continuing Operations Directory
- ASM 翻译系列第二十五弹:ASM 高级知识 When will my rebalance complete
- ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data
- LVS+Keepalived负载均衡主备&双主架构全攻略
- ASM 翻译系列第二十八弹:ASM INTERNAL Partnership and Status Table
- ASM 翻译系列第二十九弹:ASM INTERNAL Free Space Table
- MySql常用30种SQL查询语句优化方法
- RxJS速成
- 会HTML/CSS就可以轻松创建网站
- 区块链银行应用探索(Hyperledger fabric)
- mysql之基本语法
- 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 数组属性和方法
- Laravel 读取 config 下的数据方法
- PHP实现数组根据某个字段进行水平合并,横向合并案例分析
- laravel框架上传图片实现实时预览功能
- PHP 多进程与信号中断实现多任务常驻内存管理实例方法
- Yii 框架控制器创建使用及控制器响应操作示例
- laravel-admin 实现给grid的列添加行数序号的方法
- Laravel 自动生成验证的实例讲解:login / logout
- 关于Laravel-admin的基础用法总结和自定义model详解
- 解决Laravel5.2 Auth认证退出失效的问题
- php输出文字乱码的解决方法
- laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
- laravel 5.3 单用户登录简单实现方法
- Thinkphp5.0 框架的请求方式与响应方式分析
- Yii框架视图、视图布局、视图数据块操作示例
- 用php定义一个数组最简单的方法