[Leet Code 매일 한 문제] 2020.7.07, 112.경로 합계

1475 단어

112. 경로 합계(단순)


두 갈래 나무와 목표를 정하고 이 나무에 뿌리 노드가 잎 노드까지의 경로가 있는지 판단한다. 이 경로에 있는 모든 노드 값은 목표와 같다.
설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다.

예:


다음 두 갈래 나무와 목표와sum=22,
          ​	   	**5**
          ​	  	/ \
          ​		**4**   8
          ​		/   / \
          ​	**11**  13  4
          ​	/  \      \
           7      **2**      1

분석:


두 갈래 나무의 구조는 귀착에 매우 적합하다. 우리는 뿌리 결점부터 잎 결점까지 잎 결점이 요구를 충족시켜야 정답이다.경로를 따라 아래로 내려갈 때 경로를 상태로 옮겨야 하기 때문에 귀속 함수 모델이 있습니다.
def checkSum(root TreeNode, cur int) -> bool:
    return checkSum(root.left, cur + root.val) or checkSum(root.right, cur + root.val)

계속 점프 조건을 고려하여 현재 결점이 잎결점일 때 귀속은 반드시 멈춰야 하며, 현재 결점이 비어 있을 때 귀속도 계속할 수 없다.가입:
if not root:
    return None
if not root.left and not root.right:
    if cur + root.Val == sum:
        return True

코드(Golang):

func hasPathSum(root *TreeNode, sum int) bool {
    var checkSum func(root *TreeNode, sum int) bool
    checkSum = func(root *TreeNode, cur int) bool {
        if root == nil {
            return false
        }
        if root.Val + cur == sum && root.Left == nil && root.Right == nil {
            return true
        }
        return checkSum(root.Left, cur + root.Val) || checkSum(root.Right, cur + root.Val)
    }

    return checkSum(root, 0)
}

좋은 웹페이지 즐겨찾기