본문 바로가기
✨ 서울대생이 면접 떨어지고 6개월간 삽질하며 정리한 'CS 정리 노트', 지금 무료로 풀립니다!
Computer Science/Data Structure

[자료구조] 이진트리 주요 알고리즘

by ggyongi 2021. 4. 10.

응용 문제를 잘 풀기 위해 기본을 탄탄하게 만들어야 한다.

이진트리 문제 중 기본에 해당하는 문제들을 익히면서 나만의 접근법을 완성시키자!

 

1. 이진트리 최대 깊이 탐색(dfs 사용하였다.)

leetcode.com/problems/maximum-depth-of-binary-tree

# 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:
    max_dep =0
    def maxDepth(self, root: TreeNode) -> int:
        def dfs(node, depth):
            if not node :
                self.max_dep = max(self.max_dep,depth)
                return
            
            dfs(node.left, depth+1)
            dfs(node.right, depth+1)
            
        dfs(root,0)
        return self.max_dep

 

2. 이진트리 반전

leetcode.com/problems/invert-binary-tree

 

각각 dfs, bfs 풀이다.

# 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 invertTree(self, root: TreeNode) -> TreeNode:
        
        def dfs(node):
            if not node:
                return
            
            node.left, node.right = dfs(node.right), dfs(node.left)
            return node
        
        dfs(root)
        return root
# 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 invertTree(self, root: TreeNode) -> TreeNode:
        queue = collections.deque([root])
        
        while queue:
            node = queue.popleft()
            if node:
                node.left, node.right = node.right, node.left
                
                queue.append(node.left)
                queue.append(node.right)
                
        return root

 

3. 두 이진트리 병합

leetcode.com/problems/merge-two-binary-trees

# 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 mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
        if root1 and root2:  
            node = TreeNode(root1.val+root2.val)
            node.left = self.mergeTrees(root1.left,root2.left)
            node.right = self.mergeTrees(root1.right,root2.right)
            return node
        else:
            return root1 or root2
# 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 mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
        
        def dfs(node1,node2):
            if node1 and node2:
                node1.val += node2.val
                node1.left = dfs(node1.left, node2.left)
                node1.right = dfs(node1.right, node2.right)
                
            elif node2 and not node1:
                node1 = node2
                
            return node1
         
        return dfs(root1,root2)
 

[지금 무료]컴퓨터 구조: 면접 탈락을 끝낸 궁극의 CS 정리 노트 강의 | 이용준 - 인프런

이용준 | 실무와 면접에서 자주 마주치는 컴퓨터 구조 개념만 선별해, 도해 중심으로 쉽게 설명하고 정리한 핵심 CS(computer-science) 강의입니다. 처음 접하는 사람도 흐름을 잡고, 이후 학습을 빠르

www.inflearn.com

📘 비전공자 개발자 취업 성공기 시리즈

개발자가 되고 싶었던 한 비전공자의 1년 4개월 이야기
막막했던 시작부터 좌절, 그리고 합격까지의 여정을 기록했습니다

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글