LeetCode 543 solution

LeetCode  543 solution

problem

Given the root of a binary tree, return the length of the diameter of the tree.

The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

The length of a path between two nodes is represented by the number of edges between them.

Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].

python

class Solution:
    def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
        self.diameter = 0
        def depth(node):
            if not node:
                return 0
            left_h = depth(node.left)
            right_h = depth(node.right)
            self.diameter = max(self.diameter,left_h + right_h)
            return 1 + max(left_h,right_h)
        depth(root)
        return self.diameter

DFS를 이용하면 쉽게 문제를 풀 수 있다. 해당 문제는 높이를 구하는 문제이기 때문에 각 노드를 방문할 때마다, 그 노드의 왼쪽과 오른쪽 자식의 높이를 계산하고, 이 높이들을 더해서 가장 큰 값을 찾아주면 된다. 이렇게 함으로써 우리는 전체 트리의 지름을 알 수 있다.

중요한 것은 트리의 모든 노드를 한 번씩만 확인해도 된다. 한 번씩만 확인하는 것이 가장 효율적인 계산법이 될 것이다. 높이를 계산하는 것도 중요하다. 왜냐하면 높이를 알아야 각 노드를 통과하는 경로의 길이를 알 수 있기 때문이다. 우리는 최대 값을 계속해서 갱신해나가면서 모든 노드에서 한 번씩만 계산하여 가장 긴 경로 diameter를 구해낼 수 있다.

Read more

airflow 구성하고 vscode로 코딩하기

맥에서 했으면 훨씬 구성이 쉬웠겠지만, 그리고 poetry로 했으면 훨씬 쉬웠겠지만 워낙 규모가 있는 라이브러리이다 보니 과정이 어려워 다른 참조들을 보면서 따라했다. 기본적으로 poetry랑 쓰기 어려운 이유는 airflow 내부의 라이브러리에 따라 poetry가 버전을 참조하지 못해서 에러가 나는 경우가 존재한다고 한다. 또한 하나의 문제는 mac에서는 그냥 리눅스가 존재하지만 윈도우에서 하려면 윈도우용 linux인

[Json] dump vs dumps

json은 javascript object notation의 줄임말로 웹 어플리케이션에서 구조화된 데이터를 표현하기 위한 string 기반의 포맷이다. 서버에서 클라인트로 데이터를 전송하여 표현하거나, 그 반대로 클라이언트에서 서버로 보내는 경우들에 사용된다. javascript 객체 문법과 굉장히 유사하지만 워낙에 범용성이 넓게 설계되어 있어서 다른 언어들에도 많이 사용된다. 기본적으로 python 에는 json 이 내장 모듈이다. 바로 import json해주면