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实现删除Android工程中的冗余字符串
Jan 19 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
在Django的上下文中设置变量的方法
Jul 20 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
对pandas里的loc并列条件索引的实例讲解
Nov 15 Python
python http基本验证方法
Dec 26 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
Python 文件数据读写的具体实现
Jan 24 Python
如何利用python生成MD5并去重
Dec 07 Python
在pyCharm中下载第三方库的方法
Apr 18 Python
python基于机器学习预测股票交易信号
May 25 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生成Flash动画的实现代码
2010/03/12 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
JavaScript实现前端倒计时效果
2021/02/09 Javascript
pandas通过loc生成新的列方法
2018/11/28 Python
python字典排序的方法
2019/10/12 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
生物科学专业个人求职信范文
2013/12/05 职场文书
实习自我鉴定
2013/12/15 职场文书
销售类求职信
2014/06/13 职场文书
妇女工作先进事迹
2014/08/17 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
MySQL创建管理HASH分区
2022/04/13 MySQL
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript