玄魂工作室秘书 [玄魂工作室]

思路:先用递归创建一颗二叉树,作为输入;然后对这课二查树进行递归遍历,递归中每遍历一个节点,下次递归的和为sum-data;并用一个数组记录遍历过的路径,当存在sum时,输出数组中的路径。

下图为树的输入,输入的数组为:

[10,5,4,None,3,None,None,7,None,None,12,None,None]

没有子节点的用None表示,构造树时用递归先构造左子树。

代码:

"""
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。"""
class TreeNode:"""树的节点定义,后面的很多操作都是基于节点的"""def __init__(self): """定义一个树的节点,初始状态左右节点为空"""self.leftNode = Noneself.rightNode = Nonedef setData(self, data):"""设置数字的方法args: data节点值"""self.data = datadef setLeftNode(self, leftNode):"""设置左节点的方法args: leftNode 左节点"""self.leftNode = leftNodedef setRightNode(self, rightNode):"""设置右节点的方法args: rightNode 右节点"""self.rightNode = rightNodedef getData(self):"""获取节点数字return:返回节点数字"""return self.datadef getLeftNode(self):"""获取左节点return:返回左节点"""return self.leftNodedef getRightNode(self):"""获取右节点return:返回右节点"""return self.rightNodeclass test:def __init__(self):"""test类的初始化,用来构造树和调用查找算法return:返回右节点""" #self.tree = self.build_tree()self.index = 0self.data = [10,5,4,None,3,None,None,7,None,None,12,None,None]self.tree = self.build_node()tempNode = self.treedata_list = []self.findSum(tempNode, 22, data_list)def build_node(self):"""根据输入,用递归的方法,构造树的方法""" if self.index < len(self.data):curr_data = self.data[self.index]self.index = self.index + 1if curr_data != None:onNode = TreeNode()     onNode.setData(curr_data)       left_node = self.build_node()onNode.setLeftNode(left_node)right_node = self.build_node()onNode.setRightNode(right_node)return onNodedef findSum(self,node, needsum, data_list):"""递归调用findSum,查找和是needsum的路径args:node是树的根节点,每次递归的是节点移动needsum是需要求的和data_list里面存的是路径""" if node != None and node.getData() <= needsum :if node.getData() < needsum:#print node.getData()newSum = needsum - node.getData()curr_data = node.getData()data_list.append(curr_data)self.findSum(node.getLeftNode(), newSum, data_list)self.findSum(node.getRightNode(), newSum, data_list)data_list.pop()else:#开始打印输出路径if node.getData() == needsum:for d in data_list:print dprint node.getData()print '-----------'if __name__ == "__main__":   onNode = test()

输出:
10

5

4

3


10

5

7


10

12


欢迎关注订阅号:白话算法

Python算法和数据结构:在二叉树中找到和为sum的所有路径相关推荐

  1. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  2. 左神算法:在二叉树中找到累加和为指定值的最长路径长度(Java版)

    本题来自左神<程序员代码面试指南>"在二叉树中找到累加和为指定值的最长路径长度"题目. 题目 给定一棵二叉树的头节点 head 和一个 32 位整数 sum,二叉树节点 ...

  3. 在给定总和K的二叉树中找到级别

    Description: 描述: The article describes how to find the level in a binary tree with given sum K? This ...

  4. Python算法实战视频课程--二叉树-刘硕-专题视频课程

    Python算法实战视频课程--二叉树-9146人已学习 课程介绍         二叉树是重要的抽象数据类型,解决很多问题时都需要它.通过本课我们学习这种重要的数据结构,本课注重实践,没有过多枯燥的 ...

  5. 在二叉树中找到累加和为指定值的最长路径长度

    在二叉树中找到累加和为指定值的最长路径长度 给定一棵二叉树的头节点 head 和一个 32 位整数 sum,二叉树节点值类型为整型,求累加和为 sum 的最长路径长度.路径是指从某个节点往下,每次最多 ...

  6. 左神算法基础班4_4_3在二叉树中找到一个节点的后继节点

    Problem: 在二叉树中找到一个节点的后继节点 [题目] 现在有一种新的二叉树节点类型如下: public class Node { public int value; public Node l ...

  7. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

  8. 在二叉树中找到两个节点的最近公共祖先(C++)

    在二叉树中找到两个节点的最近公共祖先 描述   给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...

  9. 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法。

    假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法. #include<iostream>//蓝多多算法实验五:二叉树的应用(二) #inclu ...

最新文章

  1. 【每日一算法】KMP算法,看不懂算我输!
  2. Grid++Report问题集!
  3. python保存的图片不完整
  4. 在家办公怎么弄?华为云DevCloud宝典一看就懂——迭代开发篇
  5. 不懂就问,Spring 是如何判定原型循环依赖和构造方法循环依赖的?
  6. 【matlab】三维曲面(矩形网格---meshgrid)
  7. Android配置http请求
  8. 项目答辩PPT(一)
  9. 服务器系统2019回滚2016,原版系统一键优化精简方案(Win10/Server2016/Server2019)
  10. Mian容器中Page分頁
  11. 低熵加壳malware
  12. Echarts 大数据可视化基本使用
  13. 计算机自动执行的条件是,电脑中winsat.exe进程总会自动运行的解决方法
  14. 【软件测试】公司招个测试员,我又面试了100多人,结局......
  15. 国赛mysql加固_2019 全国大学生信息安全竞赛创新能力实践赛3道Web Writeup
  16. 树莓派安装AdGuard Home
  17. Android模拟屏幕鼠标
  18. 【Android Broadcast】BroadcastReceiver
  19. 从pcap文件中解析网络数据包
  20. Git连接GitHub仓库,同步上传图片及CSDN外链图片转存失败解决方案

热门文章

  1. 禾多推出高精度定位和自动驾驶验证平台!倪凯:助力行业量产,定位中国向导...
  2. 算法工程师特大福利 | 不用买云了!这里GPU计算资源免费送!
  3. 企业部署Linux应用将拥有更低的整体拥有成本
  4. 总是多次出现 那个同样的 权限错误 _storage_write_error_, 所以一开始就把机器设好setenforce 0...
  5. 关于Warshall、Roy对寻找传递闭包方法的不同表达的探讨
  6. 定时PING下IP地址,检测该服务器是否还活着。 smokeping
  7. mysql附件卸载_彻底卸载mysql
  8. fetch git pull 切换_每天提交 Git 太烦?直接用 Python 就好了!
  9. Go 语言编程 — gormigrate GORM 的数据库迁移助手
  10. ETSI MEC — 多接入边缘计算