【剑指Offer】【树】二叉树中和为某一值的路径
2024-10-21 13:33:56
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
A:选择前序遍历,因为前序遍历先访问根节点
选择从后向前递归,每次减去当前节点的值,直到遍历到叶子节点,若值减为0则找到了一条路径和,填入listAll中
若当前不是叶子节点 且 剩余的值还未为零,则递归调用该节点的左子树,再递归调用该节点的右子树
若不符合,则删除结点
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
private:
vector<vector<int> > listAll;
vector<int> list;
void ifFind(TreeNode * node , int left)
{
//存入路径list
list.push_back(node->val); //是否是叶子节点,且路径和一致
if((left - node->val == 0) && (node->left == nullptr) && (node->right == nullptr))
{
listAll.push_back(list); //{10,5,7} ==> {10,12}
}
else
{
if(node->left)
{
ifFind(node->left, left - node->val);
}
if(node->right)
{
ifFind(node->right, left - node->val);
}
}
list.pop_back(); //{10,5,4} => ture => true
}
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber)
{
//{10,5,4,7,12}
if(root != nullptr)
{
ifFind(root,expectNumber);
}
return listAll;
}
};
最新文章
- php读取json时无数据(为空)的解决方法
- <;!DOCTYPE>;
- hdu 1520 Anniversary party 基础树dp
- 重构第10天:提取方法(Extract Method)
- Axure一点2
- List排序忽略大小写
- Centos6.5 install Python2.7 &; django &; mysql &; apache
- Android项目开发五-《星星生活志》1.使用MediaRecorder录制音频
- 在MyEclipse 2013中使用图形界面快速配置Struts2的操作方法
- tensorflow Sigmoid 应用
- OO第十二次作业
- PHP常用函数归类【持续整理中......】
- ZOJ - 3261 Connections in Galaxy War(并查集删边)
- SSM框架之整合(Maven实例)
- Win2012&;Win2008双系统启动菜单设置
- perl6: Proc::Async (new)
- addEventListener的click和onclick的区别
- phpStrom激活
- [转]ASP.NET MVC4中@model使用多个类型实例的方法
- JAVAEE——宜立方商城12:购物车实现、订单确认页面展示
热门文章
- 【译】2022 年回顾:Web 性能有哪些新变化?
- [python] Python map函数总结
- css预处理器scss/sass语法以及使用
- Java入门及环境搭建
- NoClassDefFoundError的两种情况
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
- 05-Sed操作参数(II)
- MySQL 表的创建、复制、修改与删除
- 初始rust
- Kubernetes(k8s)控制器(二):DaemonSet