输入一颗二叉树的根节点和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。路径定义为从树的根节点开始往下已知到叶节点所经过的节点所形成的一条路径。在返回值的list中,数组长度大的数组靠前。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
import copy
class Solution:
def FindPath(self, root, expectNumber):
if root == None:
return []
ret = []
supportArrayList = [[root.val]] # 对于每个节点来说,保存其路径,保存的是node的值
support = [root] # 当前的node,保存的是node,用来做广度优先遍历
while support:
tmpNode = support[0]
tmpArrayList = supportArrayList[0]
if tmpNode.left == None and tmpNode.right == None:
if sum(tmpArrayList) == expectNumber:
ret.insert(0, tmpArrayList)
if tmpNode.left:
support.append(tmpNode.left)
newTmpArrayList = copy.copy(tmpArrayList)
newTmpArrayList.append(tmpNode.left.val)
supportArrayList.append(newTmpArrayList)
if tmpNode.right:
support.append(tmpNode.right)
newTmpArrayList = copy.copy(tmpArrayList)
newTmpArrayList.append(newTmpArrayList)
supportArrayList.append(newTmpArrayList)
del supportArrayList[0]
del support[0]
return ret