二叉树中和为某一值的路径 牛客网 程序员面试金典 C++ Python
2024-09-06 02:13:03
二叉树中和为某一值的路径 牛客网 程序员面试金典
- 题目描述
- 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
c++
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
//run:3ms memory:484k
vector<vector<int>> FindPath(TreeNode* root, int expectNumber){
vector<vector<int>> ret;
vector<int> lt;
if (NULL == root) return ret;
return FindAPath(root,expectNumber,ret,lt);
}
vector<vector<int>> FindAPath(TreeNode* root, int expectNumber,
vector<vector<int>> &path_list,vector<int> lt){
if (NULL == root) return path_list;
expectNumber -= root->val;
lt.push_back(root->val);
if (expectNumber != 0){
FindAPath(root->left,expectNumber,path_list,lt);
FindAPath(root->right,expectNumber,path_list,lt);
}else if(NULL == root->left && NULL == root->right)
path_list.push_back(lt);
return path_list;
}
//run:3ms memory:480k
vector<vector<int> > FindPath2(TreeNode* root,int expectNumber){
if(root) dfsFind(root, expectNumber);
return allRes;
}
void dfsFind(TreeNode * node , int target){
tmp.push_back(node->val);
if(!node->left && !node->right){
if(target - node->val == 0) allRes.push_back(tmp);
}else{
if(node->left) dfsFind(node->left, target - node->val);
if(node->right) dfsFind(node->right, target - node->val);
}
if(!tmp.empty())
tmp.pop_back();
}
private:
vector<vector<int> >allRes;
vector<int> tmp;
};
Python
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# run:32ms memory:5736k
def FindPath(self, root, expectNumber):
if None == root: return []
return self.FindAPath(root,expectNumber,[],[])
def FindAPath(self,root,expectNumber,path_list,lt):
if None == root: return
expectNumber = expectNumber - root.val
lt.append(root.val)
if expectNumber !=0:
left_lt = list(lt)
self.FindAPath(root.left,expectNumber,path_list,left_lt)
right_lt = list(lt)
self.FindAPath(root.right,expectNumber,path_list,right_lt)
elif root.left == None and root.right == None:
path_list.append(lt)
return path_list
最新文章
- POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1
- asp.net core StaticFiles中间件修改wwwroot
- php常用mysql函数
- 键盘code码速查表
- C#第三方zip解压压缩工具,带事例源码
- Android开发之Handler的用法(源码分享)
- jquery序列化form表单
- FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)
- 单元测试系列:如何使用JUnit+JaCoCo+EclEmma完成单元测试
- Django REST framework+Vue 打造生鲜超市(四)
- Java中谈尾递归--尾递归和垃圾回收的比较
- 请求不同域的数据方法:requests Jsonp cors
- 命令行安装kvm虚拟机、桥接网络、用virt-manager管理
- shell统计昨天的独立ip
- Python 百度ai身份证接口案例
- TCP/IP协议体系结构简介
- 23种设计模式之观察者模式(Observer)
- Vue.Js加入bootstrap及jquery,或加入其他插件vue-resource,vuex等
- 在Firefox中发现一个在Linux下查看chm文档的插件
- 十二、spark MLlib的scala示例
热门文章
- 每日学习——C++习题
- 关于goto
- 开源ASR服务器vosk
- 学习laravel总结中...
- command &#39; cl.exe&#39; failed: No such file or directory解决办法
- js模块化开发 AMD CMD Commonjs
- P3971-[TJOI2014]Alice and Bob【贪心】
- 深入浅出WPF-06.Binding(绑定)01
- 简单介绍session,cookie,token以及区别
- 11.4.3 LVS-TUN