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获取GY-85九轴模块信息示例
Dec 05 Python
在Python中操作字典之fromkeys()方法的使用
May 21 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
python制作一个桌面便签软件
Aug 09 Python
详解Python装饰器由浅入深
Dec 09 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python文件拆分与重组实例
Dec 10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
pycharm 实现显示project 选项卡的方法
Jan 17 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python中qutip用法示例详解
Oct 02 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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面向对象全攻略 (七) 继承性
2009/09/30 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
学习PHP session的传递方式
2016/06/15 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
js脚本学习 比较实用的基础
2006/09/07 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
js对象的复制继承实例
2015/01/10 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
AngularJs表单校验功能实例代码
2017/02/09 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
详解vue-router 路由元信息
2017/09/13 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
Python将list元素转存为CSV文件的实现
2020/11/16 Python
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
会计岗位职责范本
2014/03/07 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书