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 相关文章推荐
Python中装饰器学习总结
Feb 10 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
Linux下Python安装完成后使用pip命令的详细教程
Nov 22 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Django框架创建项目的方法入门教程
Nov 04 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 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记录页面停留时间的方法
2016/03/30 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
javascript 写类方式之五
2009/07/05 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
python logging日志模块以及多进程日志详解
2018/04/18 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
总经理助理岗位职责
2013/11/08 职场文书
党员培训思想汇报
2014/01/07 职场文书
购房协议书
2014/04/11 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
新闻稿件写作技巧
2015/07/18 职场文书
被委托人身份证明
2015/08/07 职场文书
外出听课学习心得体会
2016/01/15 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
java项目构建Gradle的使用教程
2022/03/24 Java/Android
阿里云日志过滤器配置日志服务
2022/04/09 Servers