解题思路:
首先对二叉树进行判空,如果根节点为空,则返回true
接下来对当前节点的左节点和右节点进行判断
1.如果左节点和右节点同时为空,则返回true。
2.如果左节点和右节点只有一个为空时,返回false。
3.如果左节点的值和右节点的值不相等时,返回false。
4.分别递归遍历左子树的左子树和右子树的右子树是否对称,左子树的右子树和右子树的左子树是否对称,如果都对称,则返回true。
/**
* 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;
* }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
return dfs(root.left,root.right);
}
public boolean dfs(TreeNode left,TreeNode right)
{
if(left == null && right ==null ) return true;
if(left == null || right ==null) return false;
if(left.val != right.val) return false;
return dfs(left.left,right.right) && dfs(left.right,right.left);
}
}