这个题目还是比较有意思的,想了两个必要条件:

  1. 中序遍历的结果是回文的(对称的)
  2. 层序遍历的每一层是对称的

应该可以通过一些案例,但是不是充分必要条件,最后看了一下题解,代码非常少,还是很巧妙的。

public class Solution {
    public boolean isSymmetrical(TreeNode pRoot) {
        return isSame(pRoot, pRoot);
    }

    private boolean isSame(TreeNode r1, TreeNode r2) {
        if (r1 == null && r2 == null)
            return true;
        if (r1 == null || r2 == null)
            return false;
        return r1.val == r2.val 
            && isSame(r1.left, r2.right)
            && isSame(r1.right, r2.left);
    }
}