1.问题描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
2.思路解析
当前序遍历访问到某一结点时,将该结点添加到路径上,累加该节点的值,如果该结点为叶子结点且和等于期望值,打印路径,如果不是叶子结点,继续访问子节点,当前结点访问结束后,要出栈,并且从和里减去它的值。该过程用栈来保存路径上的结点。
3.python代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
import copy
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def __init__(self):
self.paths = []
def FindPath(self, root, expectNumber):
# write code here
if root==None:
return self.paths
self.CalPath(root,[], 0, expectNumber)
return self.paths
def CalPath(self, root, path, currnum, expnum):
currnum += root.val
path.append(root.val)
if root.left==None and root.right==None and currnum==expnum:
self.paths.append(copy.deepcopy(path))
if root.left!=None:
self.CalPath(root.left, path, currnum, expnum)
if root.right!=None:
self.CalPath(root.right, path, currnum, expnum)
path.pop()
4.总结
注意代码第22行为deepcopy,否则返回值为空list[]