검지offer24: 두 갈래 트리 중 어느 값의 경로

2103 단어 검지offer

제목 설명


두 갈래 나무의 루트 노드와 정수를 입력하고 사전 순서에 따라 두 갈래 나무의 결점 값과 정수를 입력하기 위한 모든 경로를 출력합니다.경로는 나무의 뿌리 결점에서 시작하여 잎 결점까지 내려가는 결점으로 경로를 형성합니다.
예제 1

입력

{10,5,12,4,7},22

반환값

[[10,5,7],[10,12]]

 
사고방식: 트레이스 경로를 가진 귀속 방법을 사용한다.두 개의 변수를 사용해야 한다. 하나의 변수는 귀속 경로를 거슬러 올라가는 데 사용되고, 하나의 변수는 조건을 만족시키는 모든 결과를 기록하는 데 사용된다.
1. 공유 목록의 팝과 append를 통해 실현한다.장점: 모든 귀속된 창고는 같은 목록을 사용하면 메모리 소모를 줄일 수 있다.
 
# -*- 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
        res = []
        path = []
        def recur(root, tar):
            if not root:return
            path.append(root.val)
            tar -= root.val
            if (tar == 0) and not root.left and not root.right:
                res.append(list(path))
            recur(root.left, tar)
            recur(root.right, tar)
            path.pop()
        recur(root, expectNumber)
        return res

 
2. 각 층에 하나의 추가 저장 장치를 추가하여 실현한다.장점이 없는 것 같고, 단점이 더 큰 것 같다. 특히 귀속층이 많을 때 메모리를 차지하는 것이 더 크다.
 
class Solution:
    #  , 
    def FindPath(self, root, expectNumber):
        if not root:
            return []
        result = []
        path = [root.val]
        self.sums = expectNumber
        self.DFS(root,result,path)
        return result
    def DFS(self,root,result,path):
        if root.left == None and root.right == None and sum(path) == self.sums:
            result.append(path)
        if root.left != None:
            self.DFS(root.left,result,path+[root.left.val])
        if root.right != None:
            self.DFS(root.right,result,path+[root.right.val])

 
# 제목은 우객망에서 유래:https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey     

좋은 웹페이지 즐겨찾기