제목 : 이진 트리, 정수 값으로 저장되어 각 노드를 감안할 때. 경로의 총 수는 경로를 찾을 주어진 값과 동일합니다. 경로는 루트에서 시작하여 필요로하지 않는다 (단 노드 부모로부터 자식 노드) 잎 노드에 종료 할 필요는 없지만 경로의 방향은 아래로해야합니다.
출처 : https://leetcode-cn.com/problems/path-sum-iii/
법 하나를 자신의 코드, 고해상도를 계산하고, 더 이전의 결과와 함께,하지만 때마다 다시 계산하면 있기 때문에 코드가 만료 매개 변수로 전달되는이 계산의 결과는 시간이 걸릴해야하며, 각 쌍 이 결과와 일치하여 계산 하였다 여러 파라미터.있는 큰 연산량을 줄일
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 이진 트리 노드에 대한 정의. 클래스 의 TreeNode : 데프 __init__ (자기, 배) : self.val = X self.left = 없음 self.right = 없음 클래스 솔루션 : 데프 pathSum (자기 루트 : TreeNode를, SU : INT) -> INT : 결과 = [0 ] DEF 판사 (고해상도) = [] 동안 입술 : a.append (res.pop ()) 경우, 합 (a) == SU : 결과 [0]결과 = [0] + 1 데프 재귀 (루트 해상도) : 만약 루트 이다 : 없음 리턴 res.append (root.val) # 每次都对입술进行求和判断 판사 (입술 [:]) 재귀 (루트. 왼쪽 입술) 재귀 (root.right, 해상도) res.pop () 재귀 (루트 입술 = []) 리턴 결과 [0]
개선 된 코드는 시간 초과되지 않습니다
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# 사용될 때 실행 : 180 MS는 모든 python3 제출에 사용자의 93.22 %를 이길 #의 메모리 소비 : 33.4 MB, 모든 python3 제출에 사용자의 9.56 %를 이길 클래스 솔루션 : DEF pathSum (자체 루트 : TreeNode를, SU : INT) -> INT : 결과 = [0] DEF의 재귀 (루트, 고해상도) : IF 루트가 됩니다 없음 : 리턴 # 이 몇 가지 첫째 조건을 충족 계산하고, 고해상도 과거에 계산하지 않아야 후 천천히 그 경우, 상기 제 1 전송을 전송합니다. 단계, RES = I +는 root.val 위한 I 의 RES] + [root.val] 결과 [0] = 결과 [0] + res.count (SU) #입술 대상 변수 직접 송신 통과하지만 인해 = 입술 + [root.val] + I의 I위한 root.val은 입술] #는 너무 함수 호출의 종료 후에 입술의 할당 재이며, 입술을 내용은 변경하지 않았다 재귀 (root.left, RES) 재귀 (root.right, RES) 재귀 (루트, RES = []) 반환 결과 [0] IF __name__ == ' __main__ ' : duixiang = 솔루션 () 루트 TreeNode를 =. (5 ) = TreeNode를. (4 ) B = TreeNode를 (. 11 ) C = TreeNode를 (2 ) D = TreeNode를 (2 ) root.left= a.left = B b.left = C b.right = D SU = 22 = duixiang.pathSum (루트 SU) 인쇄 (a)