剑指Offer(二十四):二叉树中和为某一值的路径

搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货

csdn:https://blog.csdn.net/baidu_31657889/

github:https://github.com/aimi-cn/AILearners

一、引子

这个系列是我在牛客网上刷《剑指Offer》的刷题笔记,旨在提升下自己的算法能力。

查看完整的剑指Offer算法题解析请点击:剑指Offer完整习题解析

二、题目

输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

1、思路

两个全局变量result和tmp,result来存放最终结果,tmp用来存放临时结果。

每次遍历,我们先把root的值拼接给tmp,然后判断当前root是否同时满足:

  • 左子树不为空
  • 右子树不为空
  • 拼接的结果和是否和expectNumber值相等

如果满足条件,就将tmp拼接result中,否则,依次遍历左右子树。需要注意的是,遍历左右子树的时候,全局变量tmp是需要做回溯的,因为假如一个叶子结点的路径之和不符合要求我们是不是要回溯?是不是要把这个叶子结点擦掉然后回到父节点去访问另一个子节点。

2、编程实现

python

代码实现方案:

# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
def subFindPath(root):
if root:
tmp.append(root.val)
if not root.right and not root.left and sum(tmp) == expectNumber:
result.append(tmp[:])
else:
subFindPath(root.left),subFindPath(root.right)
# 回溯
tmp.pop()
result, tmp = [], []
subFindPath(root)
sorted(result, key=len, reverse=True)
return result

AIMI-CN AI学习交流群【1015286623】 获取更多AI资料

分享技术,乐享生活:我们的公众号计算机视觉这件小事每周推送“AI”系列资讯类文章,欢迎您的关注!

最新文章

  1. 就是要你明白机器学习系列--决策树算法之悲观剪枝算法(PEP)
  2. 基于AgileEAS.NET企业应用平台实现基于SOA架构的应用整合方案-开篇
  3. DOM 样式操作
  4. MySQL 创建用户与修改密码
  5. safari的调试工具
  6. Excel 宏
  7. angular4.0使用JSONP数据请求
  8. $.ajax的标准写法
  9. C++_注释、枚举、typedef
  10. React篇-报错信息:warning: Can't call setState (or forceUpdate) on an unmounted component.
  11. 使用ant对JS/CSS 进行压缩以提高网站性能
  12. [Hook] 免root,自己进程内,binder hook (ClipboardManager)
  13. python selenium-6 HTML测试报告
  14. java基础---->FilenameFilter之文件过滤
  15. jdbc之存储过程的调用和调用方法
  16. Java HashMap工作原理及实现(转载)
  17. Hive学习路线图--张丹老师
  18. hdu 2838 Cow Sorting (树状数组)
  19. Xcode打包和生成ipa文件
  20. 火狐浏览器返回不加载JS

热门文章

  1. ServletRequest与HttpServletRequest
  2. ingress Whitelisting白名单机制
  3. 【Python学习之四】集合类型
  4. zookeeper学习整理
  5. 使用 pthread_cancel 引入的死锁问题
  6. 为文献管理软件Mendeley设置代理
  7. Qt 自定义QTabWidget
  8. jquery 根据后台传递过来的三维数组动态生成三级菜单
  9. TypeScript之泛型
  10. redis GEO的使用