class Solution {
    fun isSymmetric(root: TreeNode?): Boolean {
        if (root?.left?.`val` != root?.right?.`val`) return false
        return symmetricNodeCheckRecursive(root?.left, root?.right)
    }

    private fun symmetricNodeCheckRecursive(left: TreeNode?, right: TreeNode?): Boolean {
        if (left?.`val` != right?.`val`) return false
        if (left != null) {
            if(!symmetricNodeCheckRecursive(left.left, right?.right)) {
                return false
            }
        }
        if (left != null) {
            if(!symmetricNodeCheckRecursive(left.right, right?.left)) {
                return false
            }
        }

        return true
    }
}