101. Symmetric Tree

Bas·2022년 8월 15일
0

Leetcode

목록 보기
10/11

root node를 기준으로 대칭트리면 true, 아니면 false를 반환한다.

  1. root node가 null이면 true로 돌린다.
  2. root node의 왼쪽, 오른쪽의 대칭을 확인한다.
    -> 왼쪽 노드와 오른쪽 노드를 인자로 가지는 재귀함수를 만든다.
    a) left, right 모두 null -> true
    b) 둘 중 하나만 null -> false
    c) left.val !== right.val -> false
    a, b, c를 모두 통과하면 다시 left와 right의 left와 right들을 재귀함수 호출
const recursive = (left: null | TreeNode, right: null | TreeNode) => {
    // 2. 거르기
     // 언젠가 leaf node에 도달할 때 여기 첫 번째 if를 지남. => 3. true && true 결과 
    if (left === null && right === null) {
        console.log('끝!' , left, right)
        return true;
    }
    if ((left === null && right !==null) || (left !== null && right === null)) return false;
    if (left.val !== right.val) return false;
    
    // 3. 대칭일 때 true 반환
    return recursive(left.left, right.right) && recursive(left.right, right.left);
}

var isSymmetric = function(root: TreeNode | null) {
    // 1. root에서 거르기
    if (!root) return true;
    return recursive(root.left, root.right);
};

profile
바스버거

0개의 댓글