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 相关文章推荐
win与linux系统中python requests 安装
Dec 04 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
Jul 04 Python
python实现AES加密与解密
Mar 28 Python
opencv python图像梯度实例详解
Feb 04 Python
python的sys.path模块路径添加方式
Mar 09 Python
python文件读取失败怎么处理
Jun 23 Python
详解python UDP 编程
Aug 24 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
Django admin组件的使用
Oct 24 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图片加中文水印实现代码分享
2012/10/31 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
JS高级笔记
2011/07/13 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
vue 获取及修改store.js里的公共变量实例
2019/11/06 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
python笔记(2)
2012/10/24 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
由面试题加深对Django的认识理解
2019/07/19 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
python模块内置属性概念及实例
2021/02/18 Python
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
ktv筹备计划书
2014/05/03 职场文书
求职信的正确写法
2014/07/10 职场文书
党员民主评议个人总结
2014/10/20 职场文书
2014年煤矿工人工作总结
2014/12/08 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
《花钟》教学反思
2016/02/17 职场文书