剑指offer24: 二叉树中和为某一值的路径
描述
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
示例1
输入:
{10,5,12,4,7},22
返回值:
[[10,5,7],[10,12]]
示例2
输入:
{10,5,12,4,7},15
返回值:
[]
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def __init__(self):
self.ret=[]
def Find(self, root, target, path):
if root is None:
return
path.append(root.val)
isleaf = (root.left is None and root.right is None)
if isleaf:
if target == root.val:
self.ret.append(path[:])
if root.left:
self.Find(root.left, target-root.val, path)
if root.right:
self.Find(root.right, target-root.val, path)
path.pop()
def FindPath(self, root, expectNumber):
# write code here
if root==None:
return []
# ret = []
self.Find(root, expectNumber,[])
return self.ret
注意self.ret append 的时候 要用path[:],而不能用path[],具体原因是由于python 的对象机制导致,具体可参考 链接