程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Python-二叉树路径和

发布于2020-04-04 19:14     阅读(2034)     评论(0)     点赞(21)     收藏(0)


题目要求:

输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。

此处路径定义为:从根节点开始,往下一直到一个叶节点,其所经过的所有节点所形成的路径

要点:

1.路径的保存

2.二叉树的遍历

3.是否考虑节点为负值或0

代码:(递归实现)

  1. # coding=utf-8
  2. """
  3. question:
  4. 输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
  5. 路径定义为从树的根节点开始往下一直到叶节点所经过的节点所形成的路径。
  6. """
  7. # 节点类
  8. class TreeNode:
  9. def __init__(self, val):
  10. self.val = val
  11. self.left_child = None
  12. self.right_child = None
  13. # 在根节点为 root 的树中寻找和为 n 的路径
  14. def find_sum_path(root, n):
  15. ret = [] # 答案路径列表
  16. # 在根节点为 root 的树中寻找和为 n 的路径,以前的路径为 path
  17. # 这里讨论的算法是树的所有节点的值都是正数
  18. def find_path(root, path, n):
  19. path.append(root.val) # 当前节点加入路径
  20. if root.val > n: # 节点值已经大于 n,无解,若考虑负数,此分支不应存在
  21. pass
  22. elif root.val == n and root.left_child is None and root.right_child is None: # 解路径
  23. ret.append(path.copy())
  24. else:
  25. if root.left_child: # 遍历左子树
  26. find_path(root.left_child, path, n - root.val)
  27. if root.right_child: # 遍历右子树
  28. find_path(root.right_child, path, n - root.val)
  29. path.pop() # 当前节点从路径删除
  30. find_path(root, [], n)
  31. return ret
  32. if __name__ == '__main__':
  33. # 构造一棵树
  34. """
  35. 10
  36. 6 15
  37. 11 20
  38. 9
  39. """
  40. l = [6, 9, 10, 11, 15, 20]
  41. t = []
  42. for i in l:
  43. t.append(TreeNode(i))
  44. t[2].left_child = t[0]
  45. t[2].right_child = t[4]
  46. t[4].left_child = t[3]
  47. t[4].right_child = t[5]
  48. t[3].left_child = t[1]
  49. # 测试
  50. print(find_sum_path(t[2], 36))
  51. print(find_sum_path(t[2], 16))
  52. print(find_sum_path(t[2], 45))

 

原文链接:https://blog.csdn.net/qq_41893962/article/details/105295966



所属网站分类: 技术文章 > 博客

作者:以拯救苍生己任

链接:https://www.pythonheidong.com/blog/article/305047/7fbc4b2240fbbd55d991/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

21 0
收藏该文
已收藏

评论内容:(最多支持255个字符)