101 Symmetric Tree

Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).

Example 1:

      1
    /   \
  2       2
 / \     / \
3   4   4   3

Input: root = [1,2,2,3,4,4,3]
Output: true

Example 2:

      1
    /   \
  2       2
   \       \
    3       3

Input: root = [1,2,2,null,3,null,3]
Output: false

Constraints:

  • The number of nodes in the tree is in the range [1, 1000].
  • -100 <= Node.val <= 100
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        def checkSymmetry(
            left: Optional[TreeNode],
            right: Optional[TreeNode]
        ) -> bool:
            if not left or not right:
                return left == right
            if left.val != right.val:
                return False
            return (
                checkSymmetry(left.left, right.right)
                and checkSymmetry(left.right, right.left)
            )

        return checkSymmetry(root.left, root.right)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSymmetric(root *TreeNode) bool {
	return root != nil && checkSymmetry(root.Left, root.Right)
}

func checkSymmetry(left *TreeNode, right *TreeNode) bool {
	if left == nil || right == nil {
		return left == right
	}
	if left.Val != right.Val {
		return false
	}
	return checkSymmetry(left.Left, right.Right) && checkSymmetry(left.Right, right.Left)
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
public class Solution {
    public boolean isSymmetric(TreeNode root) {
        return (root == null) || help(root.left, root.right);
    }
    
    private boolean help(TreeNode l, TreeNode r){
        if (l == null || r == null) return l == r;
        if(l.val != r.val) return false;
        return help(l.left, r. right) && help(l.right, r.left);
    }
}