반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
[LeetCode] 1457 | Pseudo-Palindromic Paths in an Binary Tree | Python 본문
스터디/코테
[LeetCode] 1457 | Pseudo-Palindromic Paths in an Binary Tree | Python
yun_s 2022. 9. 14. 09:33728x90
반응형
문제 링크: https://leetcode.com/problems/pseudo-palindromic-paths-in-a-binary-tree/
문제
Given a binary tree where node values are digits from 1 to 9. A path in the binary tree is said to be pseudo-palindromic if at least one permutation of the node values in the path is a palindrome.
Return the number of pseudo-palindromic paths going from the root node to leaf nodes.
조건
- The number of nodes in the tree is in the range [1, $10^5$].
- 1 <= Node.val <= 9
내 풀이
root에서 시작해서 가장 끝에 있는 leaf까지의 val의 수를 세서 count에 저장한다.
현재 leaf가 가장 끝에 있는지 확인하는 방법은 root.left와 root.right이 둘 다 존재하지 않음을 확인하는 것이다.
가장 끝에 있는 leaf에 도달했을 때 count 안의 value들을 확인한 후, 해당 value의 값이 홀수인 것이 하나 이하면 ans에 1을 추가한다.
왜냐하면 value의 값이 홀수인 것이 하나일 때만 palindrome이 가능하기 때문이다.
코드
# 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 pseudoPalindromicPaths (self, root: Optional[TreeNode]) -> int:
def search(root, count):
nonlocal ans
if not root:
return
count[root.val] += 1
if not root.left and not root.right:
has_odd = 0
for val in count.values():
if val%2 == 1:
has_odd += 1
if has_odd <= 1:
ans += 1
search(root.left, count)
search(root.right, count)
count[root.val] -= 1
count = defaultdict(int)
ans = 0
search(root, count)
return ans
728x90
반응형
'스터디 > 코테' 카테고리의 다른 글
[LeetCode] 609 | Find Duplicate File in System | Python (0) | 2022.09.19 |
---|---|
[LeetCode] 2007 | Find Original Array From Doubled Array | Python (0) | 2022.09.15 |
[LeetCode] 94 | Binary Tree Inorder Traversal | Python (0) | 2022.09.08 |
[LeetCode] 606 | Construct String form Binary Tree | Python (0) | 2022.09.07 |
[LeetCode] 814 | Binary Tree Pruning | Python (0) | 2022.09.06 |
Comments