일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 방송대컴퓨터과학과
- 코딩테스트
- 중간이들
- node.js
- Cookie
- 데이터베이스시스템
- Python
- SQL
- HTML
- JavaScript
- 코딩테스트준비
- 코드잇
- 프로그래머스
- 파이썬프로그래밍기초
- 개발자취업
- 자격증
- nestjs
- 방송대
- Git
- MySQL
- 항해99
- aws
- 엘리스sw트랙
- 꿀단집
- 유노코딩
- redis
- CSS
- TiL
- 99클럽
- 파이썬
- Today
- Total
배꼽파지 않도록 잘 개발해요
99클럽 코테 스터디 17일차 TIL - Binary Tree Inorder Traversal 본문
Binary Tree Inorder Traversal
출처 : LeetCode
Given the root of a binary tree, return the inorder traversal of its nodes' values.
Example 1:
Input: root = [1,null,2,3]
Output: [1,3,2]
Example 2:
Input: root = []
Output: []
Example 3:
Input: root = [1]
Output: [1]
Constraints:
- The number of nodes in the tree is in the range [0, 100].
- -100 <= Node.val <= 100
오늘도 즐거운 리트코드 문제풀이 시간이다.
배열 문제를 주로 풀다가 트리 문제를 접하게 되니 접근 방식이 달라서 어렵게 느껴진다.
이진 트리 순회
이진 트리 순회(traversal) 방법에는 여러 가지가 있으며, 가장 일반적인 세 가지는 다음과 같다: 전위 순회(Preorder), 중위 순회(Inorder), 후위 순회(Postorder). 각 순회 방법은 노드를 방문하는 순서가 다르다. 깊이 우선 탐색(Depth-First Traversal, DFT)의 한 형태로 볼 수 있다.
전위 순회 (Preorder) | 루트 노드 -> 왼쪽 서브트리 -> 오른쪽 서브트리 | F, B, A, D, C, E, G, I, H |
중위 순회 (Inorder) 대칭 순회(symmetric traversal) |
왼쪽 서브트리 -> 루트 노드 -> 오른쪽 서브트리 | A, B, C, D, E, F, G, H, I |
후위 순회 (Postorder) | 왼쪽 서브트리 -> 오른쪽 서브트리 -> 루트 노드 | A, C, E, D, B, H, I, G, F |
중위 순회의 경우 그림으로 그려보면 다음과 같다.
왼쪽 서브트리 → 가운데 루트노드 → 오른쪽 서브트리를 순서대로 순회하는데, 위 트리에서 루트노드는 F이므로 F의 왼쪽 자식노드인 B, 다음으로는 B의 왼쪽 서브트리인 A를 찾아간다. 방문은 F→ B → A로 하여 결과값 배열에는 A부터 담긴다.
풀이
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
// 1. 왼쪽 서브 트리를 중위 순회한다.
// 2. Root 노드를 방문한다.
// 3. 오른쪽 서브 트리를 중위 순회한다.
var inorderTraversal = function(root) {
// 1. 결과를 저장할 배열을 생성
let results = [];
// 2. 노드를 순회하는 함수 traverse 생성
const traverse = (node) => {
// a. 현재 노드가 null이면 함수 종료
if (node === null) return;
// b. 현재 노드의 왼쪽 서브트리 존재시 순회
if (node.left) traverse(node.left);
// c. 현재 노드 값을 결과 배열에 넣기
results.push(node.val);
// d. 현재 노드의 오른쪽 서브트리 존재시 순회
if (node.right) traverse(node.right);
}
// 3. 루트 노드에서 순회를 시작
traverse(root);
return results;
};
참고 링크
https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C
'코딩테스트 > 99클럽' 카테고리의 다른 글
99클럽 코테 스터디 19일차 TIL - 과일 장 (0) | 2024.08.09 |
---|---|
99클럽 코테 스터디 18일차 TIL - Increasing Order Search Tree (0) | 2024.08.09 |
99클럽 코테 스터디 16일차 TIL - 최소 직사각형 (0) | 2024.08.06 |
99클럽 코테 스터디 15일차 TIL - 모의고사 (0) | 2024.08.05 |
99클럽 코테 스터디 14일차 TIL - Symmetric Tree (0) | 2024.08.04 |