24 https://leetcode.com/problems/swap-nodes-in-pairs/
가져와서 구현해준다. https://leetcode.com/problems/swap-nodes-in-pairs/discuss/œ/Python-or-Dummynode에 좋은 풀이가 있다. 내 답은 드러워서 안적음
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = p = ListNode(0)
dummy.next = head
while head and head.next:
tmp = head.next
head.next = tmp.next
tmp.next = head
p.next = tmp
head = head.next
p = tmp.next
return dummy.next
572 https://leetcode.com/problems/subtree-of-another-tree/
트리를 문자열로 만든다음에 서브트리에 속하는지 본다. 이해가 안되었던 예시가 [1,2,3], [1,2]는 False가 나와야하는데 이유는 동일한 루트 1이지만 서브트리에는 오른쪽자식인 3이 없기 때문이다.
class Solution:
def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
self.s1, self.s2 = '', ''
def inorder(node, f):
if not node:
if f: self.s1 += '#'
else: self.s2 += '#'
return
inorder(node.left, f)
if f: self.s1 += str(node.val)
else: self.s2 += str(node.val)
inorder(node.right, f)
if f: self.s1 += '$'
else: self.s2 += '$'
inorder(root, True)
inorder(subRoot, False)
return self.s2 in self.s1
근데 답중에 깔끔하게 구현한 답이 있음.
https://leetcode.com/problems/subtree-of-another-tree/discuss/265239/Python-Easy-to-Understand
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
if not s:
return False
if self.isSameTree(s, t):
return True
return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if p and q:
return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
return p is q
508 https://leetcode.com/problems/most-frequent-subtree-sum/
재귀적으로 탐색하면서 푼다. 문제특성상(?) 재귀적으로 푸는게 맞는것 같다.
class Solution:
def findFrequentTreeSum(self, root: Optional[TreeNode]) -> List[int]:
s = {}
def dfs(node):
if not node:
return 0
l = dfs(node.left)
r = dfs(node.right)
s[l + r + node.val] = s.get(l + r + node.val, 0) + 1
return l + r + node.val
dfs(root)
max_count = max(s.values())
return [k for k,v in s.items() if v == max_count]
'algorithm > problem solving' 카테고리의 다른 글
leetcode 442(find duplicate), 529(bfs), 107(트리), 637, 429, 111, 993, 50(pow) (0) | 2020.06.20 |
---|---|
leetcode 647(팰린드롬), 516(팰린드롬), 1143(팰린드롬, lcs), 583 (0) | 2020.06.13 |
leetcode 208(trie, 트라이), 648(trie), 676(trie) (0) | 2020.06.09 |
leetcode 863(트리), 430(linked list, stack), 114, 211(구현, 정규식) (0) | 2020.06.06 |
leetcode 97(dfs), 767(구현, 힙), 991(구현), 650(dp) (0) | 2020.06.02 |