Leetcode 94. Binary Tree Inorder Traversal
문제 설명
https://leetcode.com/problems/binary-tree-inorder-traversal/
이진 트리의 루트가 지정되면 노드 값의 중위 순서를 반환합니다.
중위 순회 참고
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
답안
/**
* 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[]}
*/
var inorderTraversal = function(root) {
if(!root) return [];
const leftArr = inorderTraversal(root.left);
leftArr.push(root.val);
const rightArr = inorderTraversal(root.right);
return [...leftArr, ...rightArr];
};
시간복잡도: O(N)
- 중위 순회를 하기 위해 root.left로 재귀를 돌려 left의 left로 타고 들어간다.
- 그러다 젤 left 자식을 만나면 return 해야하므로 루트 값이 없을 때(!root) 빈 배열을 반환해주는 조건문을 건다.
- 반환된 빈 배열에는 left 자식들의 값을 저장할 배열로 사용하기 위해 저장하고, left.left..left의 root를 leftArr에 담아준다.
- 그 다음 left.left..right의 자식을 또 재귀 돌려 빈 노드를 만나면 빈 배열이 반환되면서 right 자식들의 값이 배열에 담긴다.
- 해당 루트가 반복되면서 젤 상위 root로 왔다가 right.left..left로 파고 들어간다.
- 최종적으로 상위 root와 상위 root의 left 자식들을 담은 leftArr과 상위 root의 right 자식들을 담은 rigthArr이 하나로 합쳐져 반환된다.