주어진 값을 가진 리프 삭제

1988 단어 leetcodetheabbiedsa
이진 트리root와 정수target가 주어지면 값이 target인 모든 리프 노드를 삭제합니다.

값이 target 인 리프 노드를 삭제한 후 부모 노드가 리프 노드가 되고 값이 target 인 경우 삭제해야 합니다(할 수 없을 때까지 계속 수행해야 함).

예 1:



입력: 루트 = [1,2,3,2,null,2,4], 대상 = 2
출력: [1,null,3,null,4]
설명: 값(대상 = 2)이 있는 녹색의 리프 노드가 제거됩니다(왼쪽 그림).
제거 후 새 노드는 값이 (대상 = 2)인 리프 노드가 됩니다(가운데 그림).

예 2:



입력: 루트 = [1,3,3,3,2], 대상 = 3
출력: [1,3,널,널,2]

예 3:



입력: 루트 = [1,2,null,2,null,2], 대상 = 2
출력: [1]
설명: 값(대상 = 2)이 있는 녹색의 리프 노드는 각 단계에서 제거됩니다.

제약:
  • 트리의 노드 수가 [1, 3000] 범위에 있습니다.
  • 1 <= Node.val, target <= 1000

  • 해결책:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
        def removeLeafNodes(self, root: Optional[TreeNode], target: int) -> Optional[TreeNode]:
            if root:
                if not root.left and not root.right and root.val == target:
                    return None
                root.left = self.removeLeafNodes(root.left, target)
                root.right = self.removeLeafNodes(root.right, target)
                if not root.left and not root.right and root.val == target:
                    return None
            return root
    

    좋은 웹페이지 즐겨찾기