发布于2020-04-04 19:14 阅读(2034) 评论(0) 点赞(21) 收藏(0)
输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
此处路径定义为:从根节点开始,往下一直到一个叶节点,其所经过的所有节点所形成的路径
1.路径的保存
2.二叉树的遍历
3.是否考虑节点为负值或0
- # coding=utf-8
-
- """
- question:
- 输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
- 路径定义为从树的根节点开始往下一直到叶节点所经过的节点所形成的路径。
- """
-
-
- # 节点类
- class TreeNode:
- def __init__(self, val):
- self.val = val
- self.left_child = None
- self.right_child = None
-
-
- # 在根节点为 root 的树中寻找和为 n 的路径
- def find_sum_path(root, n):
- ret = [] # 答案路径列表
-
- # 在根节点为 root 的树中寻找和为 n 的路径,以前的路径为 path
- # 这里讨论的算法是树的所有节点的值都是正数
- def find_path(root, path, n):
- path.append(root.val) # 当前节点加入路径
- if root.val > n: # 节点值已经大于 n,无解,若考虑负数,此分支不应存在
- pass
- elif root.val == n and root.left_child is None and root.right_child is None: # 解路径
- ret.append(path.copy())
- else:
- if root.left_child: # 遍历左子树
- find_path(root.left_child, path, n - root.val)
- if root.right_child: # 遍历右子树
- find_path(root.right_child, path, n - root.val)
- path.pop() # 当前节点从路径删除
-
- find_path(root, [], n)
- return ret
-
-
- if __name__ == '__main__':
- # 构造一棵树
- """
- 10
- 6 15
- 11 20
- 9
- """
- l = [6, 9, 10, 11, 15, 20]
- t = []
- for i in l:
- t.append(TreeNode(i))
- t[2].left_child = t[0]
- t[2].right_child = t[4]
- t[4].left_child = t[3]
- t[4].right_child = t[5]
- t[3].left_child = t[1]
-
- # 测试
- print(find_sum_path(t[2], 36))
- print(find_sum_path(t[2], 16))
- 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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!