문제 링크
https://leetcode.com/problems/symmetric-tree/정답 코드
function isSymmetric(root: TreeNode | null): boolean {
return isMirror(root.left, root.right);
function isMirror(r1,r2):boolean {
if(r1 === null && r2 === null) return true;
if(r1 === null || r2 === null) return false;
if(r1.val !== r2.val) return false;
return isMirror(r1.left,r2.right) && isMirror(r1.right,r2.left)
}
};
해당 문제는 언제 mirror 한 상태가 되는지를 먼저 따져보면 된다.
완전 최상위 root를 기준으로 left와 right value값이 같고,
그 다음부터는 두개의 구역으로 나눠지게 된다. 이것을 일단 r1과 r2라는 이름의 구역으로 나누고,
r1의 left와 r2.left가 같으면서 r1의 right와 r2의 left가 계속 일치하면 mirror한 상태가 된다는 것을 알 수 있다.
그렇기때문에 해당 상태에 대한 코드를 만들고 재귀함수를 사용하여 계속해서 true한지를 return 하고 결국 어느 순간 null값이 되는데 동시에 null로 빠지게 되면 완전한 mirror한 상태가 되므로 true값을 반환하고 그 외의 상황은 모두 false한 상황이기때문에 false를 반환하면 된다.