题目描述
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路
深度优先搜索(DFS)
- 如果有左孩子,就将左孩子存起来,路径之和累加
- 有右孩子也一样处理
- 如果没有左右子孩子并且路径之和等于给的目标值,就把该路径存起来
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
if not root or not expectNumber:
return []
res=[]
path=[root.val]
self.expectpath(root,expectNumber,path,res)
return res
def expectpath(self,root,expectNumber,path,res):
if not root.left and not root.right and sum(path)==expectNumber:
res.append(path)
if root.left:
self.expectpath(root.left,expectNumber,path+[root.left.val],res)
#两个列表可以通过+来合并成一个列表
if root.right:
self.expectpath(root.right,expectNumber,path+[root.right.val],res)
测试用例
if __name__=='__main__':
s=Solution()
#构建二叉树
root=TreeNode(3)
node1=TreeNode(4)
node2=TreeNode(7)
node3=TreeNode(5)
node4=TreeNode(6)
node5=TreeNode(2)
node6=TreeNode(3)
node7=TreeNode(1)
root.left=node1
root.right=node2
node1.left=node3
node1.right=node4
node2.left=node5
node2.right=node6
node5.left=node7
node3.left=node3.right=node4.left=node4.right=node5.right=node6.left=node6.right=node7.left=node7.right=None
#调用函数
print(s.FindPath(root,13))
ps:并没有按照长度返回列表,也可AC