题目:

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

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

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3

 

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

 

限制:

0 <= 节点个数 <= 1000

代码:

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public boolean isSymmetric(TreeNode root) {
12         if(root==null){return true;}
13         TreeNode res=new TreeNode(root.val);
14         swap(root,res);
15 
16         //判断对不对称
17         return fun(root,res);
18     }
19 
20     //将二叉树对称
21     public static void swap(TreeNode root,TreeNode res){
22         
23         if(root.right!=null){
24         res.left=new TreeNode(root.right.val);
25         swap(root.right,res.left);
26         }
27         
28         if(root.left!=null){
29         res.right=new TreeNode(root.left.val);
30         swap(root.left,res.right);
31         }
32     }
33     public static boolean fun(TreeNode root,TreeNode res){
34         if((root==null&&res!=null)||(root!=null&&res==null)){return false;}
35         else if(root==null&&res==null){return true;}
36         else if(root.val==res.val){
37             return fun(root.left,res.left)&&fun(root.right,res.right);
38         }
39         else{ return false;}
40 
41     }
42 
43 }

剑指 Offer 28. 对称的二叉树_二叉树