본문 바로가기
카테고리 없음

[Leetcode/JS] 257. Binary Tree Paths

by 질서정연_ 2023. 7. 17.

 

문제링크 

 

Binary Tree Paths - LeetCode

Can you solve this real interview question? Binary Tree Paths - Given the root of a binary tree, return all root-to-leaf paths in any order. A leaf is a node with no children.   Example 1: [https://assets.leetcode.com/uploads/2021/03/12/paths-tree.jpg] In

leetcode.com

 
 
 
 

기억하면 좋을 것 

JavaScript에서 배열을 새로운 변수에 할당하는 경우 새로운 배열은 기존 배열을 참조한다. == 얕은 복사

얕은 복사는 값 복사 X, 주소가 복사된다.

그래서 새로운 배열을 바꾸는 경우 기존 배열도 바뀐다. 

배열의 참조가 아닌 복사를 위해서 기존에는 map이나 slice를 사용했지만 

spread 연산자를 사용해 새로운 복사된 배열을 생성할 수 있다.

 

재할당 : 새 메모리 공간을 확보하고 값을 저장한 후 변수가 이전에 참조하던 메모리 변수를 변경 함으로써 이루어진다.  

 

참조

 

https://velog.io/@euneun/JS-%EA%B9%8A%EC%9D%80%EB%B3%B5%EC%82%AC%EC%99%80-%EC%96%95%EC%9D%80%EB%B3%B5%EC%82%AC-%EA%B7%B8%EB%A6%AC%EA%B3%A0-spread-operator%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

 

JS - 깊은복사와 얕은복사 그리고 spread operator에 대해서

js의 깊은복사와 얕은복사 파헤치기 ❤️‍🔥

velog.io

https://paperblock.tistory.com/62

 

[ES6] Spread Operator (스프레드 연산자)

ES6에서는 '...'와 같이 다소 특이한 형태의 문법이 추가되었습니다. 점 3개가 연달아 붙어있는 이 표시는 Spread Opertor(스프레드 오퍼레이터, 스프레드 연산자, 전개 구문, 펼침 연산자...)를 나타내

paperblock.tistory.com

 

소감

재귀로 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

댓글