리트코드 101번

나의 풀이

var isSymmetric = function(root) {
    let left = [];
    let right = [];
    
    function leftDFS(root) {
        if (!root) {
            left.push(null);
            return;
        } 
        if (!root.left && !root.right) {
            left.push(root);
            return;
        }
        
        left.push(root);
        leftDFS(root.left);
        // left.push(root)
        leftDFS(root.right);
    } 
    leftDFS(root);
    
    function rightDFS(root) {
        if(!root) {
            right.push(null);
            return;
        }
        if (!root.left && !root.right) {
            right.push(root);
            return;
        }
        
        right.push(root);
        rightDFS(root.right);
        rightDFS(root.left);
    }
    rightDFS(root);
    return String(left.map(x => x ? x.val : null)) === String(right. map(x =>x ? x.val : null))
};

왼쪽에서 DFS하면서 얻은 배열과 오른쪽에서 DFS하면서 얻은 배열이 같으면 true 그렇지 않다면 false를 반환한다.

다른 사람들의 풀이

다른 사람들은 재귀를 이용해서 깔끔하게 푸시는데 나는 아직 재귀를 제대로 이해하지 못한 것 같다. 아직 재귀를 한번에 구현하지는 못하고 종이에 과정써가면서 하는데 아직 익숙해지지 않은 것 같다.

좋은 웹페이지 즐겨찾기