Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- spring batch 5.0
- DesignPattern
- KPT회고
- 코딩테스트 준비
- 빈 충돌
- 항해99
- 구글 OAuth login
- 커스텀 헤더
- 개발자 취업
- 프로그래머스 이중우선순위큐
- 파이썬
- 디자인패턴
- @FeignClient
- 인프콘 2024
- JavaScript
- infcon 2024
- 1주일회고
- 단기개발자코스
- 빈 조회 2개 이상
- jwttoken
- 전략패턴 #StrategyPattern #디자인패턴
- 99클럽
- TiL
- Python
- jwt
- 개발자부트캠프추천
- Spring multimodule
- 취업리부트코스
- 디자인 패턴
- 프로그래머스
Archives
- Today
- Total
m1ndy5's coding blog
LeetCode 543. Diameter of Binary Tree with Python 본문
https://leetcode.com/problems/diameter-of-binary-tree/description/
어려웠던 문제ㅠㅠ 잘 몰라서 책보고 풀었다.
# 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 diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
longest = [0]
# 가운데 노드 기준
def dfs(node):
if not node:
return -1
# 왼쪽에 최대 몇개, 오른쪽에 최대 몇개 -> 자식 없으면 -1, 1개면 0, ...
left = dfs(node.left)
right = dfs(node.right)
# 꼭 루트기준이 아니기 때문에 기존 longest에 저장된 값이랑 비교해 봐야함
longest[0] = max(longest[0], left + right + 2)
# 왼쪽에서 온게 더 긴지 오른쪽에서 온게 더 긴지
return max(left, right) + 1
dfs(root)
return longest[0]
이 문제에서 키포인트는 꼭 루트를 훑지 않아도 된다는 것이었다.
처음에 어짜피 더 긴게 저장되는데 왜 longest를 기존에 있던 longest와 비교해서 넣어야되지? 그냥 계속 최댓값 갱신 아닌가 라고 생각했는데
각 노드를 기준으로 왼쪽 오른쪽 길이를 비교하는 거여서 루트노드의 왼쪽+오른쪽이 항상 길라는 법이 없었다!
'알고리즘 with python > 알고리즘 스터디' 카테고리의 다른 글
LeetCode 700. Search in a Binary Search Tree with Python (0) | 2024.01.12 |
---|---|
LeetCode 938. Range Sum of BST with Python (0) | 2024.01.12 |
LeetCode 207. Course Schedule with Python (0) | 2024.01.11 |
LeetCode 78. Subsets with Python (0) | 2024.01.11 |
LeetCode 51. N-Queens with Python 백트래킹 문제 (1) | 2024.01.10 |