解题思路:
首先对二叉树进行判空,如果根节点为空,则返回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);}
}