해당 문제는 원래 재귀적으로 풀면 굉장히 간단한 문제이다.
중위탐색이라는 개념을 이해하고 있다면 재귀적인 생각을 안 할 수가 없는데
그렇게 되면 시간 복잡도는 문제될 것이 없지만 공간 복잡도가 굉장히 커지게 된다.
따라서 문제에 제시된 대로 stack을 구현해 재귀의 개념을 iterative하게 풀이하였음
/**
* Definition for a binary tree node.
* class TreeNode {
* val: number
* left: TreeNode | null
* right: TreeNode | null
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
* }
*/
function inorderTraversal(root: TreeNode | null): number[] {
const result = [];
// 재귀함수를 사용하지 않기 위해 stack자료형 사용
const stack = [];
let current = root;
while(current || stack.length > 0) {
// 중위순회는 좌측 노드 우선 탐색
while(current) {
stack.push(current);
current = current.left;
}
current = stack.pop();
result.push(current.val);
current = current.right;
}
return result
};