- 문제 링크: https://leetcode.com/problems/minimum-depth-of-binary-tree/
자 오랜만에 또 릿코드를 풀어봤습니다. 별로 풀 생각은 없었는데 알고리즘 같이 공부하자고 해서 시작을 했습니다. 일주일에 2~3문제씩 풀고 풀이하고 그럴 예정입니다
이 문제 난이도는 easy고, 이진트리의 minimum depth를 찾는 것이 목적입니다
bfs로 한 depth씩 내려가다가 리프노드 나오면 그때 depth를 반환하면 됩니다. 이 문제에서 depth는 leaf까지 오는데 거치는 노드의 수니까 2가 됩니다. 이 문제에서 노드의 value는 의미 없습니다
Example 2
Input: root = [2,null,3,null,4,null,5,null,6]
Output: 5
이 문제가 좀 헷갈리는게 2번째 예제를 헷갈리게 써놨습니다. 대충 뭘 의미하는지는 알겠습니다. skewed tree 말하는 거겠죠... 근데 root = [a, b, c, ..] 이런식으로 예제가 나와 있으면 보통은 Full binary tree를 의미하는 걸로 생각하지 않나요? 이건 뭐 prefix traversal도 아니고... 뭘 나타내는지 모르겠습니다.
그냥 이 예제는 무시하시고, root 노드가 입력값으로 주어지니 로직만 집중하셔서 문제를 푸시면 되겠습니다
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def minDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
else:
return self.dfs(root, 1)
def dfs(self, root, step):
# leaf
if not root.left and not root.right:
return step
ret = 99999
if root.left:
ret = min(ret, self.dfs(root.left, step+1))
if root.right:
ret = min(ret, self.dfs(root.right, step+1))
return ret
대충 푼 소스입니다. 위에서 풀이는 BFS로 써놨는데 왜 DFS냐고요? 문제를 검색할 때 태그에다가 dfs를 입력해서 문제를 찾았기 때문에 이 문제도 자연스럽게 dfs로 풀어버렸습니다. BFS로 다시 푸는건 귀찮으니 생략하겠습니다
이 문제는 DFS로 풀면 모든 노드 방문해야되니 비효율적입니다. 그래도 통과는 됩니다. 이 문제를 푸실 분이 있다면 BFS로 푸세요
'Online Judge > LeetCode' 카테고리의 다른 글
[LeetCode][Python] 797. All Paths From Source to Target (0) | 2020.12.08 |
---|---|
[LeetCode][Python] 1315. Sum of Nodes with Even-Valued Grandparent (0) | 2020.11.11 |
[LeetCode][Python] 700. Search in a Binary Search Tree (0) | 2020.10.31 |
[LeetCode][Python] 7. Reverse Integer (0) | 2020.10.31 |
[LeetCode][Python] 3. Longest Substring Without Repeating Characters (0) | 2020.10.31 |