LeetCode-in-All

101. Symmetric Tree

Easy

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

Example 1:

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

Output: true

Example 2:

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

Output: false

Constraints:

Follow up: Could you solve it both recursively and iteratively?

Solution

%% Definition for a binary tree node.
%%
%% -record(tree_node, {val = 0 :: integer(),
%%                     left = null  :: 'null' | #tree_node{},
%%                     right = null :: 'null' | #tree_node{}}).

-spec is_symmetric(Root :: #tree_node{} | null) -> boolean().

is_symmetric(null) -> true;
is_symmetric(Root) -> is_symmetric(Root#tree_node.left, Root#tree_node.right).

is_symmetric(null, null) -> true;
is_symmetric(null, _) -> false;
is_symmetric(_, null) -> false;
is_symmetric(L, R) -> 
    is_symmetric(L#tree_node.left, R#tree_node.right)
     and (L#tree_node.val == R#tree_node.val) 
     and is_symmetric(R#tree_node.left, L#tree_node.right).