// 중위 순회이므로 left가 먼저 function inorderTraversal(root: TreeNode | null): number[] { let stack = []; let result = []; while(root !== null || stack.length !== 0) { while(root !== null) { stack.push(root); root = root.left; } root = stack.pop(); result.push(root.val); root = root.right; } return result; };
즉 플로우를 글로 나타내면
[ [1,null,2,3] ] → left가 null 2번째 while문을 빠져나와 stack에서 pop을 한 후 root.val 인 1을 푸쉬 → right 값을 넣어 root가 [2,3]으로 변하고 [[2,3]] 형태로 stack에 push 됨 → left인 3이 있으므로 한번 더 push가 되어 총 stack 메모리는 [[2,3],[3]] 형태가 됨 → pop이 이루어지면 val인 3이 push → 한번 더 pop이 이루어지면 2가 push → stack메모리가 비어졌으므로 반복문 종료 → 즉 결과 값은 [1,3,2] 가 리턴