문제링크
기억하면 좋을 것
JavaScript에서 배열을 새로운 변수에 할당하는 경우 새로운 배열은 기존 배열을 참조한다. == 얕은 복사
얕은 복사는 값 복사 X, 주소가 복사된다.
그래서 새로운 배열을 바꾸는 경우 기존 배열도 바뀐다.
배열의 참조가 아닌 복사를 위해서 기존에는 map이나 slice를 사용했지만
spread 연산자를 사용해 새로운 복사된 배열을 생성할 수 있다.
재할당 : 새 메모리 공간을 확보하고 값을 저장한 후 변수가 이전에 참조하던 메모리 변수를 변경 함으로써 이루어진다.
참조
https://paperblock.tistory.com/62
소감
재귀로 dfs 를 만들어 node와 path 를 전달받게 했는데 path를 매번 newPath = [...path, node.val]
이렇게 스프레드 연산자를 사용해서 복사 해 주지 않으면 재귀를 통해 path가 변경 될 때 모든 path 가 일괄적으로 바뀌기 때문에 스프레드 연산자로 복사를 해줘야한다.
배열을 얕은 복사를 해서 새로운 변수에 기존 배열을 넣는 선언을 할 때 배열 자체가 아닌 주소값을 가리키고 있다는 것을 잊지말자.
해결 코드
/**
* 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 {string[]}
*/
var binaryTreePaths = function(root) {
let result = [];
let dfs = (node, path)=>{
let newPath = [...path, node.val];
if(!node.left && !node.right) result.push(newPath.join('->'));
if(node.left) dfs(node.left, newPath);
if(node.right) dfs(node.right, newPath);
}
dfs(root, []);
return result;
};
Submission Detail
댓글