Binary Tree Level Order Traversal - LeetCode
Binary Tree Level Order Traversal - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
한 레벨의 노드들을 담는 리스트를 만들어서 풀었다.
루트 노드부터 각 레벨의 리스트를 만들어 순회하면서 result 리스트에 답을 추가하고
다음 리스트를 만들면 된다. 더이상 만들 수 있는 다음레벨 리스트가 없을때까지
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
level = []
if not root:
return []
level.append(root)
result = []
while level:
tmp = []
nlevel = []
for node in level:
tmp.append(node.val)
if node.left:
nlevel.append(node.left)
if node.right:
nlevel.append(node.right)
result.append(tmp[:])
level = nlevel
return result

시간복잡도는 노드개수가 N일때 O(N)이고 공간복잡도는 O(2 ^ logN)일듯?
다른 방법으로 풀 수도 있다.
class Solution:
def helper(self, result, node, level):
if not node:
return
if len(result) <= level:
result.append([])
result[level].append(node.val)
self.helper(result, node.left, level + 1)
self.helper(result, node.right, level + 1)
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
result = []
self.helper(result, root, 0)
return result
근데 이건 성능이 영 안좋다 ㅋㅋㅋㅋ function call을 많이해서 그런듯!! 메모리도 많이 쓸수밖에없고
첨 작성했던 솔루션이 아무리 봐도 최적이다. 살짝의 변경만을 가해서 submission 결과를 향상시켜보았다
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
level = [root]
result = []
while level:
result.append(list(map(lambda x : x.val, level)))
nlevel = []
for node in level:
if node.left:
nlevel.append(node.left)
if node.right:
nlevel.append(node.right)
level = nlevel
return result

'코딩 테스트 및 알고리즘 > leetcode for google' 카테고리의 다른 글
| leetcode medium : Construct Binary Tree from Preorder and Inorder Traversal (0) | 2022.05.16 |
|---|---|
| leetcode medium : Binary Tree Zigzag level Order Traversal (0) | 2022.05.16 |
| leetcode medium : validate binary search tree (0) | 2022.05.14 |
| leetcode medium : Interleaving String 공간 최적화하기 (0) | 2022.05.14 |
| leetcode medium : Interleaving String (0) | 2022.05.14 |