Python二叉树中和为某一值的路径

本文阅读 1 分钟
首页 Python笔记 正文

递归

  1. '''
  2. 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
  3. 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
  4. '''
  5. # -*- coding:utf-8 -*-
  6. class TreeNode:
  7. def __init__(self, x):
  8. self.val = x
  9. self.left = None
  10. self.right = None
  11. class Solution:
  12. # 返回二维列表,内部每个列表表示找到的路径
  13. def FindPath(self, root, sum):
  14. if not root:
  15. return []
  16. if root.left == None and root.right == None:
  17. if sum == root.val:
  18. return [[root.val]]
  19. else:
  20. return []
  21. stack = []
  22. leftStack = self.pathSum(root.left, sum - root.val)
  23. for i in leftStack:
  24. i.insert(0, root.val)
  25. stack.append(i)
  26. rightStack = self.pathSum(root.right, sum - root.val)
  27. for i in rightStack:
  28. i.insert(0, root.val)
  29. stack.append(i)
  30. return stack
  31. # 优化写法
  32. def pathSum(self, root, sum):
  33. if not root: return []
  34. if root.left == None and root.right == None:
  35. if sum == root.val:
  36. return [[root.val]]
  37. else:
  38. return []
  39. a = self.pathSum(root.left, sum - root.val) + self.pathSum(root.right, sum - root.val)
  40. return [[root.val] + i for i in a]
  41. pNode1 = TreeNode(10)
  42. pNode2 = TreeNode(5)
  43. pNode3 = TreeNode(12)
  44. pNode4 = TreeNode(4)
  45. pNode5 = TreeNode(7)
  46. pNode1.left = pNode2
  47. pNode1.right = pNode3
  48. pNode2.left = pNode4
  49. pNode2.right = pNode5
  50. S = Solution()
  51. print(S.FindPath(pNode1, 22))
  52. # 测试用例:[1,-2,-3,1,3,-2,null,-1] -1
  53. # 测试用例:[-2, None, -3] -5
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python二叉搜索树的后续遍历序列
« 上一篇 01-21
Python复杂链表的复制
下一篇 » 01-21

发表评论

惪特博客
  • 文章总数:
    18497 篇
  • 评论总数:
    53345 条
  • 标签总数:
    8873 个
  • 总浏览量:
    22969615 次
  • 最后更新:
    3月27日

最多点赞

随便看看

标签TAG