python3实现在二叉树中找出和为某一值的所有路径(推荐)


Posted in Python onDecember 26, 2019

请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径。

规则如下:

1、从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设置的某一值的相同,那么输出这条路径上的所有节点。

2、从根节点遍历树时,请请按照左到右遍历,即优先访问左子树的节点。

二叉树创建规则:从上到下一层一层的,按照从左到右的顺序进行构造

输入"10,5,12,4,7"值,构造的树如下:

1) 10
2) 10
      /
    5

3) 10
       /\
     5 12
4) 10
        /\
      5 12
     /
   4

5) 10
        /\
      5 12
      /\
     4 7

针对上面的二叉树,如果当前我们设置的“路径和”为19,那么输出结果为:
10,5,4

如果有多个路径,按到左到右的顺序遍历生成的结果每行显示一个显示。例如如果当前我们设置的“路径和”为22,那么

输出结果为:

10,5,7
10,12

如果没有找到路径和为设置的值的路径,输出error。

三、输入:

输入整数N---路径和
一行字符串,多个正整数,之间用","隔开

四、输出: 满足条件的二叉树路径

五、样例输入:

22
10,5,12,4,7

六、样例输出:

10,5,7
10,12

demo:

class Node(object):
  def __init__(self, x):
   self.val = x
   self.left = None
   self.right = None
class Tree(object):
 lt = [] # 依次存放左右孩子未满的节点
 def __init__(self):
   self.root = None
 def add(self, number):
   node = Node(number) # 将输入的数字节点化,使其具有左右孩子的属性
   if self.root == None:
     self.root = node
     Tree.lt.append(self.root)
   else:
     while True:
       point = Tree.lt[0] # 依次对左右孩子未满的节点分配孩子
       if point.left ==None:
         point.left = node
         Tree.lt.append(point.left) # 该节点后面作为父节点也是未满的,也要加入到列表中。
         return
       elif point.right ==None:
         point.right = node
         Tree.lt.append(point.right) # 与左孩子同理
         Tree.lt.pop(0) # 表示该节点已拥有左右孩子,从未满列表中去除
         return
class Solution:
 def __init__(self):
   self.results = []
 def RecursionFindPath(self, root, expectNumber, result):
   result.append(root.val)
   if root.left == None and root.right == None and sum(result) == expectNumber:
     self.results.append(result)
   temp = result[:]
   if root.left:
     self.RecursionFindPath(root.left, expectNumber, result)
   result = temp[:]
   if root.right:
     self.RecursionFindPath(root.right, expectNumber, result)
 def FindPath(self, root, expectNumber):
   if root == None:
     return []
   self.RecursionFindPath(root, expectNumber, [])
   self.results = sorted(self.results, key=len, reverse=True)
   return self.results
if __name__ =='__main__':
 t = Tree() # 二叉树类的实例化
 L = [10, 5, 12, 4, 7]
 for i in L:
   t.add(i)
 expectNum = 22
 print(Solution().FindPath(t.root, expectNum))

输出样例:

python3实现在二叉树中找出和为某一值的所有路径(推荐)

总结

以上所述是小编给大家介绍的python3实现在二叉树中找出和为某一值的所有路径,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
深入了解Django View(视图系统)
Jul 23 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python脚本导出为exe程序的方法
Mar 25 Python
Python存储读取HDF5文件代码解析
Nov 25 Python
django如何自定义manage.py管理命令
Apr 27 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 #Python
基于h5py的使用及数据封装代码
Dec 26 #Python
python深copy和浅copy区别对比解析
Dec 26 #Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 #Python
torch 中各种图像格式转换的实现方法
Dec 26 #Python
python两个_多个字典合并相加的实例代码
Dec 26 #Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 #Python
You might like
php 设计模式之 单例模式
2008/12/19 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
微信小程序自定义底部导航带跳转功能
2018/11/27 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
简单了解Django模板的使用
2017/12/20 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
Python实现FM算法解析
2019/06/18 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
财务会计毕业生个人求职信
2014/02/03 职场文书
上党课的心得体会
2014/09/02 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
2014年变电站工作总结
2014/12/19 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
护士旷工检讨书
2015/08/15 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
Python与C++中梯度方向直方图的实现
2022/03/17 Python