您的位置:首页 > 编程语言 > Python开发

《苦练算法》-剑指Offer- 二十四、二叉树中和为某一值得路径 -python编写

2018-02-08 19:02 281 查看
题目描述

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

题目分析

其实也不难分析这道题,很明了,就是二叉树从上到下遍历,如果到了叶子的话整个路径的val相加在一起为输入整数,就把整个路径记录下来即可

就相当于每次从开头开始遍历,每次用输入的值减去目前的节点的val,并将这个结点加入到一个序列中去,之后判断整个节点是否是页节点,减去之后是否为0满足的话说明是 所要路径,之后再把整个序列整个加到总共的路径序列中去,主要还是递归用法,并且有点像DFS(深度优先)算法的思想,具体来看代码比较清晰:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def __init__(self):
self.l = [] #定义全局list 用来记录每一次的路径
self.result = [] #定义全局 list 用来记录所有的所需路径
def FindPath(self, root, expectNumber):
# write code here
if root == None: #如果root为空说明 不是节点了 返回即可
return []
self.l.append(root.val)  #当前的节点的值记录下来
expectNumber = expectNumber - root.val  # 差值
if expectNumber==0 and not root.left and not root.right:#满足条件
#把满足要求的整个路径添加到result中
temp=[i for i in self.l]
self.result.append(temp)
self.FindPath(root.left, expectNumber) # 遍历 左子树
self.FindPath(root.right, expectNumber) #遍历 右子树
self.l.pop() #每次递归结束返回到前一个节点的时候需要把之前的那个节点值去掉
return self.result # 返回最终结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: