题目:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [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 }