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 | 29 | 30 |
31 |
Tags
- matrix
- 재귀
- tree
- 리트코드
- 문자열
- 중간
- dfs
- recursive
- leetcode
- 미디움
- hash table
- Depth-first Search
- HashTable
- two pointers
- sorting
- Python
- Array
- binary tree
- 쉬움
- list
- 이진트리
- linked list
- Medium
- easy
- Binary
- string
- DP
- backtracking
- binary search
- math
Archives
- Today
- Total
부부의 코딩 성장 일기
LeetCode 94(Binary Tree Inorder Traversal, Python) 본문
1. 문제 링크
Binary Tree Inorder Traversal - LeetCode
Can you solve this real interview question? Binary Tree Inorder Traversal - Given the root of a binary tree, return the inorder traversal of its nodes' values. Example 1: [https://assets.leetcode.com/uploads/2020/09/15/inorder_1.jpg] Input: root = [1,nu
leetcode.com
2. 문제 설명
- 이진 트리가 주어졌을 때 중위 순회(inorder traversal)한 결과를 리스트에 담아 반환하는 문제
- 중위 순회가 무엇인지는 5. 배운 점에서 자세히 설명
- 트리 구조에서는 재귀 함수를 자주 사용하게 됨. 트리 구조 문제가 많기 때문에 트리라는 녀석과 재귀 함수에 익숙해져야함.
3. 처음 풀이
- 트리 끝까지 가서 노드가 None이면 빈 리스트 [] 를 반환
- 노드가 None이 아니라면 중위 순회 정의대로 왼쪽 서브트리를 중위 순회한 후, 루트 노드 방문, 오른쪽 서브트리를 중위 순회한다.
- 따라서 root.left에 재귀함수 결과값, root.val, root.right에 재귀함수 결과값을 순서대로 result 리스트에 추가하기를 반복
# 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
def find(root):
result = []
if root == None: #끝까지 내려가서 None이 나오면 result에 아무것도 추가하지 않기 위해 [] 반환
return []
result += find(root.left) #재귀: 왼쪽 서브 트리 중위 순회한 결과를 result에 추가
result.append(root.val) #루트 노드 값 추가
result += find(root.right) #재귀: 오른쪽 서브 트리 중위 순회한 결과를 result에 추가
return result
return find(root)
4. 다른 풀이
- 이 문제의 경우 조금씩 다를 순 있지만 큰 논리 흐름이나 쓰이는 툴이 대부분 비슷함.
5. 배운 점
- 트리 자료구조의 노드를 순회하는 방법들
- 전위 순회(Preorder Traversal):
- 루트 노드를 먼저 방문하고, 그 다음에 왼쪽 서브트리를 전위 순회하고, 마지막으로 오른쪽 서브트리를 전위 순회합니다.
- 방문 순서: 루트 -> 왼쪽 서브트리 -> 오른쪽 서브트리
- 중위 순회(Inorder Traversal):
- 왼쪽 서브트리를 중위 순회한 뒤에 루트 노드를 방문하고, 마지막으로 오른쪽 서브트리를 중위 순회합니다.
- 방문 순서: 왼쪽 서브트리 -> 루트 -> 오른쪽 서브트리
- 후위 순회(Postorder Traversal):
- 왼쪽 서브트리를 후위 순회한 뒤에 오른쪽 서브트리를 후위 순회하고, 마지막으로 루트 노드를 방문합니다.
- 방문 순서: 왼쪽 서브트리 -> 오른쪽 서브트리 -> 루트
- 레벨 순회(Level Order Traversal):
- 각 레벨 순서대로 노드를 방문합니다. 즉, 루트에서부터 각 레벨의 왼쪽에서 오른쪽 순서대로 노드를 방문합니다.
- 전위 순회(Preorder Traversal):
A
/ \
B C
/ \
D E
#전위 순회: A -> B -> D -> E -> C
#중위 순회: D -> B -> E -> A -> C
#후위 순회: D -> E -> B -> C -> A
#레벨 순회: A -> B -> C -> D -> E
'Algorithm > LeetCode' 카테고리의 다른 글
LeetCode 101(Symmetric Tree, Python) (0) | 2023.11.16 |
---|---|
LeetCode 100(Same Tree, Python) (0) | 2023.11.15 |
LeetCode 83(Remove Duplicates from Sorted List, Python) (1) | 2023.11.12 |
LeetCode 70(Climbing Stairs, Python) (1) | 2023.11.11 |
LeetCode 69(Sqrt(x), Python) (0) | 2023.11.10 |