본문 바로가기
코딩문제

[LeetCode] 623. Add One Row to Tree (Python)

by 컴돌이_예준 2022. 10. 5.

623번 문제 링크

https://leetcode.com/problems/add-one-row-to-tree/

 

Add One Row to Tree - 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

문제설명

입력: root (TreeNode), val(int), depth (int)

출력: depth 깊이에 val 값이 추가된 root 트리

* depth가 1이라면 root자리에 node를 추가하고 원래 tree를 새 node의 left subtree로 오게하기

문제예제

depth가 2이고 val이 1이므로

2의 깊이에 1의 값인 node를 추가함.

문제풀이

1. 일단 depth를 알 수 있어야 하므로 depth를 알 수 있도록 함수를 만들자.

2. depth - 1일때 (추가할 노드의 바로 위에서) left와 right에 새노드를 추가하자.

3. left에 추가된 새 노드, 기존의 left node를 새 left 노드의 left subtree로 지정,
right에 추가된 새 노드, 기존의 right node를 새 right 노드의 right subtree로 지정.

4. 만약 depth가 1이라면 위와 다른 방법으로, root 위에 새 노드를 추가하고,
새 node의 left에 원래 root를 추가

5. root를 return

정답코드

# 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 addOneRow(self, root: Optional[TreeNode], val: int, depth: int) -> Optional[TreeNode]:
        
        def add(node, d): 
            """ tree에 node를 더해주는 함수
    
            Args:
                node (TreeNode): 각 노드를 지칭합니다.
                d (int): node의 깊이를 나타냅니다.
            
            """
            if d == depth-1:        # depth-1에서 left와 right로 node를 추가해준다.
                
                temp = node.left            # 기존의 left subtree 를 temp에 저장
                node.left = TreeNode(val)   # left에 새로운 node를 추가해줌
                node.left.left = temp       # 새노드의 left에 기존 subtree를 연결해줌
                
                temp = node.right           # 위와 동일 right
                node.right = TreeNode(val)
                node.right.right = temp
                
            if node.left:
                add(node.left, d+1)
            if node.right:
                add(node.right, d+1)
       
        
        if depth == 1:      # depth가 1이면
            temp = root             
            root = TreeNode(val)
            root.left = temp
        else:               # depth가 1이 아니면      
            add(root, 1)
        return root

풀이후 생각정리

(내가 설명을 잘하는 편이 아니라..) 뭔가 말로 설명하기가 어려운 문제다.  그렇게 복잡하진 않고, 문제에서 무엇을 요구하는지 직접적으로 눈에 보인다.

그렇게 어렵진 않은 문제였다!

 

* 이해가 잘 안되는 내용이나 오류가 있으면 댓글로 알려주시면 감사하겠습니다.. ( _ _ ') 꾸벅