-
[LeetCode] 이진트리 문제 -Feat: 재귀알고리즘 2022. 4. 27. 21:13
이진트리
이진트리란?
컴퓨터 과학에서, 이진 트리(二進-, 영어: binary tree)는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료 구조로, 자식 노드를 각각 왼쪽 자식 노드와 오른쪽 자식 노드라고 한다.
이진트리 관련 문제
https://leetcode.com/problems/merge-two-binary-trees/
- 이진트리를 병합하는 방법
풀이법_#1. 재귀함수 사용
파이썬 클래스 매서드를 재귀호출하려면 함수이름앞에 self. 을 붙여야함.
# 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: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: if (not root1): return root2 elif (not root2): return root1 node = TreeNode(root1.val + root2.val) node.left = self.mergeTrees(root1.left, root2.left) node.right = self.mergeTrees(root1.right, root2.right) return node
116번
풀이_#1
재귀함수 사용
재귀함수를 사용할때는 재귀함수의 1번의 싸이클이 무엇을 의도하는지 생각한 뒤 짜야한다.
아래 코드의 경우에는 재귀함수 1번의 싸이클이 인자로 받은 root라는 이름의 노드의 left 와 right child 의 next 를 지정해 주는 역할을 하며,
당연히 재귀가 끝나는 조건은 root 라는 이름이 left 나 right child 를 가지지 않을때이다.
문제의 Follow-up 요구사항에 나와있듯이, space Time O(1) 로 구현했.""" # Definition for a Node. class Node(object): def __init__(self, val=0, left=None, right=None, next=None): self.val = val self.left = left self.right = right self.next = next """ class Solution(object): def connect(self, root): """ :type root: Node :rtype: Node """ if (not root): return root if root.left: root.left.next = root.right if root.right and root.next: root.right.next = root.next.left if root.left: self.connect(root.left) if root.right: self.connect(root.right) return root
'알고리즘' 카테고리의 다른 글
[LeetCode] 21. Merge Two Sorted Lists (0) 2022.04.28 [LeetCode] BFS 와 접근법 (0) 2022.04.28 [LeetCode] Two Pointer, Sliding Window (0) 2022.04.26 [LeetCode] 167. Two Sum II - Input Array Is Sorted (0) 2022.04.24 [LeetCode] 283. Move Zeroes (0) 2022.04.24