原题:
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
改编版:
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下所经过的结点形成一条路径。(不一定到叶子节点)。
题目分析:
本人改编版和原版的区别在于,完全二叉树: {10,5,12,4,7},值15。原题则答案为[],改编版应该为[[10,5]]。改编版的难度在于,存在很多不到叶子节点的路径需要判断,所以对于存储路径的列表操作就会变得复杂。本人给出一个解决方法:
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
if expectNumber == 0:
return []
else :
self.result=[]
self.expectNumber=expectNumber
self.traversal(root,[],0)
return self.result
def traversal(self,root,path,sumvalue):
k=[i for i in path]
num=root.val+sumvalue
if num == self.expectNumber:
k.append(root.val)
self.result.append(k)
if num < self.expectNumber:
k.append(root.val)
if root.left is not None:
self.traversal(root.left,k,num)
if root.right is not None:
self.traversal(root.right,k,num)